keras Conv2D中theano张量变量的形状

数据挖掘 喀拉斯 卷积神经网络 西阿诺
2022-02-25 13:27:16

作为 theano 的新手,请多多包涵。我认为张量变量的形状已经在 Conv2D 层中很好地定义了,因为指定了输入,如下所示,

from keras.layers import Input, Convolution2D
import theano
input_img = Input(shape=(1, 28, 28))
x = Convolution2D(16, 3, 3, activation='relu', border_mode='same')   (input_img)
print type(x)
print theano.tensor.shape(x)

但输出是,

<class 'theano.tensor.var.TensorVariable'>
Shape.0

由于我采用默认步幅 1,并且same此处的边框模式意味着添加了填充,因此输出与输入相同。使用这些信息,我可以手动计算输出形状应该是什么。

我在这里错过了什么吗?问题是如何获得卷积层输出的形状?

1个回答

您无法获得 theano 张量的形状,因为它不是固定的。卷积层的输出只是一个符号变量,它的形状取决于你放入层中的任何内容作为输入。

您可以通过为层的输出创建一个 theano 函数并通过该函数提供一个 numpy 数组来获取特定输入的输出形状:

import numpy as np
input = np.ones(28*28).reshape(1, 1, 28, 28).astype('float32')
fn = theano.function([input_img], x)

print fn(input).shape
>>> (1, 16, 28, 28)