Keras Concatenate TypeError:__ init __()得到参数'axis'的多个值

Mid*_*Inc 4 keras tensorflow keras-layer

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

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

代码段:

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)
Run Code Online (Sandbox Code Playgroud)

详细错误消息:

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'
Run Code Online (Sandbox Code Playgroud)

Mid*_*Inc 9

我找到了似乎有效的解决方案!

我对代码做了两处更改.

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

相关的代码段现在看起来像这样

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

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

非常感谢你的帮助.欣赏它!


She*_*yem 6

我也遇到这样的错误。

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

我用 justconcatenate而不是解决了这个问题Concatenate

up5_0 = concatenate([UpSampling2D(size=(2, 2))(conv4_0), conv4], axis=3)
Run Code Online (Sandbox Code Playgroud)