我要实现多个Conv2D层,然后将输出连接起来。
x = Conv2D(f, kernel_size=(3,3), strides=(1,1))(input)
y = Conv2D(f, kernel_size=(5,5), strides=(2,2))(input)
output = Concatenate()([x, y])
您知道,不同的内核大小会产生不同的输出形状。尽管我可以做到:
x = Conv2D(f, kernel_size=(3,3), strides=(1,1), padding="same")(input)
y = Conv2D(f, kernel_size=(5,5), strides=(2,2), padding="same")(input)
output = Concatenate()([x, y])
但是那会大大增加通道数量,这使我用尽了内存。我还可以计算输出形状,但是如果更改内核大小,这将很不方便。 我尝试过:
y = tf.reshape(y, x.shape)
但是我给出了错误:
ValueError: Cannot convert a partially known TensorShape to a Tensor
有没有简单的方法来连接多个Conv2D层的输出?
答案 0 :(得分:1)
如果两个图层的形状不匹配,则无法将它们连接在一起。您可以利用 if (!snapshot.empty) {
const doc = snapshot.docs[0];
projectData = doc.data();
status = 200;
}
层添加具有ZeroPadding2D
值的行和列,以匹配输出的形状。
这是形状最短的例子。
代码:
0
输出:
在此示例中,我将输入形状设为from tensorflow.keras.layers import *
from tensorflow.keras import *
import tensorflow as tf
input = Input(shape = (28,28,3))
x = Conv2D(3, kernel_size=(3,3), strides=(1,1))(input)
y = Conv2D(3, kernel_size=(5,5), strides=(2,2))(input)
z = tf.keras.layers.ZeroPadding2D(padding=(7,7))(y)
output = Concatenate()([x, z])
model = Model(inputs = input, outputs = output)
tf.keras.utils.plot_model(model, 'my_first_model.png', show_shapes=True)
。您可以添加自己的输入形状,并相应地更改要添加的填充行和填充列的数量。
您可以查看(28,28,3)
here