【问题标题】:Keras Concatenate TypeError: __init__() got multiple values for argument 'axis'Keras Concatenate TypeError: __init__() 为参数“轴”获取了多个值
【发布时间】:2018-01-16 23:08:44
【问题描述】:

我目前正在尝试重新创建 Unet。在需要合并两层输出的“上卷积”部分,我得到了上述错误。 (TypeError:init() 为参数 'axis' 获得了多个值)

  • Keras 版本:2.0.6
  • Tensorflow-GPU:1.2.1

代码sn-p:

import gzip
import os

from six.moves import urllib
import tensorflow as tf
import numpy as np

from keras.models import Sequential, Model
from keras.layers import Input, Dropout, Flatten, Concatenate
from keras.layers import Conv2D, MaxPool2D, Conv2DTranspose
from keras.utils import np_utils
import keras.callbacks

# Define model architecture
input1 = Input((X_train.shape[1], X_train.shape[2], 1))

conv1 = Conv2D(64,(3,3), activation='relu', padding='same')(input1)
conv1 = Dropout(0.2)(conv1)
conv1 = Conv2D(64,(3,3), activation='relu', padding='same')(conv1)
pool1 = MaxPool2D(pool_size=(2,2))(conv1)

conv2 = Conv2D(128,(3,3), activation='relu', padding='same')(pool1)
conv2 = Dropout(0.2)(conv2)
conv2 = Conv2D(128,(3,3), activation='relu')(conv2)
pool2 = MaxPool2D(pool_size=(2,2))(conv2)

conv3 = Conv2D(256,(3,3), activation='relu', padding='same')(pool2)
conv3 = Dropout(0.2)(conv3)
conv3 = Conv2D(256,(3,3), activation='relu', padding='same')(conv3)
pool3 = MaxPool2D(pool_size=(2,2))(conv3)

conv4 = Conv2D(512,(3,3), activation='relu', padding='same')(pool3)
conv4 = Conv2D(512,(3,3), activation='relu', padding='same')(conv4)

up5 = Concatenate([Conv2DTranspose(256, (2,2), strides=(2,2),padding='same')(conv4), conv3], axis=3)
conv5 = Conv2D(256,(3,3), activation='relu', padding='same')(up5)
conv5 = Conv2D(256,(3,3), activation='relu', padding='same')(conv5)

详细的错误信息:

Traceback (most recent call last):

File "<ipython-input-48-d61955511ff9>", line 1, in <module>
runfile('C:/Users/.../MNIST_Unet_new.py', wdir='C:/Users/.../Documents/KerasTutorials')

File "C:\ProgramData\Anaconda3\envs\tensorflow-gpu\lib\site-packages\spyder\utils\site\sitecustomize.py", line 688, in runfile
execfile(filename, namespace)

File "C:\ProgramData\Anaconda3\envs\tensorflow-gpu\lib\site-packages\spyder\utils\site\sitecustomize.py", line 101, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)

File "C:/Users/.../MNIST_Unet_new.py", line 107, in <module>
up5 = Concatenate([Conv2DTranspose(256, (2,2), strides=(2,2),padding='same')(conv4), conv3], axis=3)

TypeError: __init__() got multiple values for argument 'axis'

【问题讨论】:

  • 请包含python打印的完整回溯,因为不清楚该行的哪一部分产生了错误。
  • @MatiasValdenegro:我编辑了我的帖子。您现在可以看到完整的回溯。这有帮助吗?谢谢
  • 请包括进口清单。
  • @paolof89 我包括了进口! :)
  • 如果将导入从 'from keras.layers import Concatenate' 更改为 'from keras.layers.merge import concatenate' 是否有效?

标签: tensorflow keras keras-layer


【解决方案1】:

我找到了一个似乎可行的解决方案!

我对代码进行了两次更改。

  1. 我不使用 keras.layers.Concatenate,而是使用 keras.layers.concatenate
  2. 我从串联中“排除”了 Conv2dTranspose 步骤

相关代码sn-p现在是这样的

trans5 = Conv2DTranspose(256, (2,2), strides=(2,2),padding='same')(conv4)
up5 = keras.layers.concatenate([trans5, conv3], axis=3)

这可能是 keras 中的某种错误吗?我应该报告这个问题吗?

非常感谢您的帮助。欣赏!

【讨论】:

    【解决方案2】:

    我也遇到了这样的错误。

    up5_0 = Concatenate([UpSampling2D(size=(2, 2))(conv4_0), conv4], axis=3)
    TypeError: __init__() got multiple values for argument 'axis'
    

    我只使用concatenate 而不是Concatenate 解决了这个问题

    up5_0 = concatenate([UpSampling2D(size=(2, 2))(conv4_0), conv4], axis=3)
    

    【讨论】:

      【解决方案3】:

      concatenate是keras的一层,它的用途是

      keras.layers.Concatenate(axis=-1)
      

      这里如果你想使用 Concatenate 而不是 concatenate。你应该这样使用:

      up5 = Concatenate(axis=3)([Conv2DTranspose(256, (2,2), strides=(2,2),padding='same')(conv4), conv3])
      

      希望对你有用!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-29
        • 2022-11-17
        • 2019-01-03
        • 1970-01-01
        • 1970-01-01
        • 2020-01-18
        • 2018-10-18
        • 2019-07-05
        相关资源
        最近更新 更多