【发布时间】:2017-07-05 20:47:36
【问题描述】:
我们刚刚开始在课堂上使用keras,我似乎被困在我的第一个作业中。首先,我们要在keras 中构建一个简单的感知器,然后针对各种真值表对其进行训练和测试。
我从简单的 Not 关系开始。对于输入和输出,我在numpy 中生成了两个(2, 1) 形状的矩阵,代表Not 关系。然后,我根据输入和输出的形状以编程方式生成模型(以供稍后在分配中使用)。尽管当需要拟合模型时,由于我不明白的原因,数据的输入维度是错误的。 keras 产生错误
ValueError: 检查模型输入时出错:预期的 dense_1_input 具有 3 个维度,但得到的数组形状为 (2, 1)
这是一个重现问题的 SSCCE(显然您需要 keras 和 numpy 来运行它)
import keras
import numpy as np
# Shape(s): (2, 1)
xONE = np.mat([[0], [1]])
yNOT = np.mat([[1], [0]])
def generateModel(xShape, yShape):
model = keras.models.Sequential()
model.add(keras.layers.Dense(yShape[0], input_shape = xShape))
model.add(keras.layers.Activation('hard_sigmoid'))
model.summary()
return model
model = generateModel(xONE.shape, yNOT.shape)
model.compile(
optimizer = 'adam',
loss = 'binary_crossentropy',
metrics = ['accuracy'])
model.fit(xONE, yNOT, epochs = 200, batch_size = 2, verbose = 1)
score = model.evaluate(xONE, yNOT, batch_size = 2)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
我唯一的想法是model.fit 期望在模型生成期间由于使用use_bias = True 参数而在输入数据中出现偏差项?但这只是意味着它需要一个形状为(3, 1) 的输入,而不是一个 3 维输入...
【问题讨论】:
标签: python-3.x tensorflow keras