Keras Concatenate TypeError: __init__() 为参数 'axis' 获取了多个值



>我目前正在尝试重新创建Unet。在需要合并两层输出的"上卷积"部分,我得到了提到的错误。(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)

详细的错误消息:

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:ProgramDataAnaconda3envstensorflow-gpulibsite-packagesspyderutilssitesitecustomize.py", line 688, in runfile
execfile(filename, namespace)
File "C:ProgramDataAnaconda3envstensorflow-gpulibsite-packagesspyderutilssitesitecustomize.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'

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

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

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

相关的代码片段现在如下所示

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

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

无论如何,非常感谢您的帮助。欣赏它!

我也遇到了这样的错误。

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)

连接是一层 keras,它的用途是

keras.layers.Concatenate(axis=-1)

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

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

希望对您有用!

最新更新