我们刚开始在课堂上使用keras
而且我似乎被困在第一次任务的一部分。首先,我们要在keras
内构建一个简单的感知器,然后根据各种真值表进行训练和测试。
我已经开始使用简单的Not关系。对于输入和输出,我在(2, 1)
中生成了两个numpy
形状的矩阵,表示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)
而不是三维输入......
答案 0 :(得分:1)
您需要更改行
model.add(keras.layers.Dense(yShape[0], input_shape = xShape))
成:
model.add(keras.layers.Dense(yShape[1], input_dim = xShape[1]))
原因是所需的维度是每个数据样本的维度。当您使用yShape[0]
时,您传递的是样本总数。类似问题发生在input_shape = xShape
。