我正在尝试构建一个类似自动编码器的网络,但我不知道如何指定网络的输出形状。我具有大小为mxn
的输入和大小为pxq
的成对期望输出。我看过
计算卷积层中的输出大小
利用tensorflow 中的tf.nn.conv2d_transpose获得反褶积层的输出形状
但是有没有一种方法可以强制输出形状,而不必为每个输入形状计算一堆数学?
我真的不认为有办法做到这一点(很难,否则我很乐意学习(,因为任何类型的conv层的输出形状都是用几个参数进行数学运算(卷积(的结果。因此,基于输入张量和参数(步长、内核大小等(,得到的形状必须是可能的形状之一。
这与密集(完全连接的层(形成了对比,在密集层中,只要是一个数字(4、60或5000,但不是(60、60((,就可以得到任何想要的形状。
在这种情况下,有时可以帮助你的一个小技巧是打印上一层的形状,这样你就知道下一层需要什么参数,并确保你的计算是正确的:
import keras.backend as K
x = Conv2D()(x) # or any other layer
shape = K.int_shape(x)
print(shape)
x = Conv2D()(x)