我正在尝试使用预训练的VGG16模型作为编码器部分,为Keras中的分段创建一个FCN。现在在解码器部分,我尝试将转置卷积层的输出添加到VGG模型早期层的输出中
x = Conv2DTranspose(layer4.output_shape[-1], 4, strides=2, padding="same", activation="relu")(x)
x = Add()([x, layer4])
但是它在Add
层的构建函数中抛出了一个TypeError: 'NoneType' object is not subscriptable
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-39-0915433797bf> in <module>()
7 # add a deconvolution layer, add skip with layer 4
8 x = Conv2DTranspose(layer4.output_shape[-1], 4, strides=2, padding="same", activation="relu")(x)
----> 9 x = Add()([x, layer4])
10
11 # another deconvolution layer with layer 3
3 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/layers/merge.py in build(self, input_shape)
90 def build(self, input_shape):
91 # Used purely for shape validation.
---> 92 if not isinstance(input_shape[0], tuple):
93 raise ValueError('A merge layer should be called on a list of inputs.')
94 if len(input_shape) < 2:
我认为这与原始VGG模型的输入类型有关,它需要成批地使用[(None, None, None, 3)]
张量。但我不知道该怎么修
我尝试过将Add
层更改为Lambda
层,如下所示:
x = Lambda(lambda x: tf.add(x[0], x[1]))((x, layer4))
但是tf.add
出于某种原因不喜欢使用Keras层
不管怎样,解决这个问题的最佳方法是什么?我可以使输入形状固定,但我认为FCN的优点是它可以接受可变的输入形状
目前没有回答
相关问题 更多 >
编程相关推荐