【发布时间】:2019-10-26 00:20:58
【问题描述】:
我正在使用带有 anaconda 的 python 3,以及带有 over tensorflow 的 keras,我的目标是创建一个具有可变输入大小的 Conv 层的网络
我找到here使用这个代码
i = Input((None, None, 1))
o = Conv2D(1, 3, 3)(i)
model = Model(i, o)
model.compile('sgd', 'mse')
我已经用它用这段代码创建了我自己的模型(我需要一个扁平层)
model = Sequential()
I = Input((None, None, 1))
c = Conv2D(filters=1, kernel_size=(1, 1))(I)
f = Flatten()(c)
o = Dense(10, activation="softmax")(f)
m = Model(I, o)
m.compile(loss=categorical_crossentropy, optimizer=SGD(), metrics=["accuracy"])
我一直收到这个错误
ValueError:“Flatten”的输入形状未完全定义 (得到(无,无,1)。确保传递完整的“输入形状”或 模型中第一层的“batch_input_shape”参数。
似乎问题在于 Flatten 层的输入形状,当我将其删除时,它很好。
我怎样才能让它与可变大小一起玩?
谢谢
【问题讨论】:
-
你不能。因为您添加了一个 Dense 层,并且 Dense 层的输入的形状应该是已知且恒定的。当您删除 Flatten 时它会起作用,因为 Dense 层假定最后一个维度作为其输入形状,而其他维度作为批处理形状,所以在这种情况下 Dense i> 层输入形状为 (1),批次形状为 (None, None, None)
标签: python tensorflow keras deep-learning conv-neural-network