【发布时间】:2020-03-25 16:45:35
【问题描述】:
我有一个简单的网络:
input_layer = Input(1)
inner_layer = Dense(4, activation='relu')(input_layer)
output_layer = Dense(1, activation='linear')(inner_layer)
model = Model(input_layer, output_layer)
optimizer = Adam(learning_rate=0.01)
model.compile(optimizer=optimizer, loss='mse')
直观地说,输入0 的推断将只是model.predict(0)。然而这会产生这个错误:expected input_2 to have 2 dimensions, but got array with shape ()
我知道它期望输入(单个数字)是二维的,但我不明白 Tensorflow 接受什么作为有效输入。我尝试了许多不同的输入组合,有些有效,有些无效,看起来很不一致,警告/错误通常没有用:
拨打model.predict()时:
-
model.predict(0)- 抛出 -
model.predict([0])- 工作 -
model.predict([[0]])- 工作
当调用model() 时(我看到here 需要获取渐变):
-
model(0)- 抛出 -
model([0])- 抛出 -
model([[0]])- 抛出
使用np.reshape时:
-
model(np.reshape(0,[1,1]))- 工作 -
model(np.reshape([0],[1,1]))- 工作 -
model(np.reshape([[0]],[1,1]))- 工作
似乎一直在使用 numpy 的 reshape 函数。只要将它们重新整形为[1,1] 形状,它就始终适用于所有输入的model.predict() 和model()。
我的问题:
- 在输入形状/类型方面,将输入输入到 TensorFlow 模型中的准则是什么?
- “
shape ()”是什么意思? - “
(None, 1)”是什么意思? - 为什么
reshape有效而[[0]]无效?两者都创建了一个二维集合。 - 为什么在调用
model(0)/model([0])/model([[0]])时会显示此警告:WARNING:tensorflow:Model was constructed with shape Tensor("input_1:0", shape=(None, 1), dtype=float32) for input (None, 1), but it was re-called on a Tensor with incompatible shape ()?
【问题讨论】:
标签: python numpy tensorflow keras