在实例化和拟合简单keras模型时正确指定模型输入大小?

时间:2017-07-05 20:47:37

标签: python-3.x tensorflow keras

我们刚开始在课堂上使用keras而且我似乎被困在第一次任务的一部分。首先,我们要在keras内构建一个简单的感知器,然后根据各种真值表进行训练和测试。

我已经开始使用简单的Not关系。对于输入和输出,我在(2, 1)中生成了两个numpy形状的矩阵,表示Not关系。然后,我以编程方式根据输入和输出的形状生成模型(以便稍后在赋值中使用)。虽然到了适合模型的时候,数据的输入维度是错误的,原因我不明白。 keras产生错误

  

ValueError:检查模型输入时出错:期望的dense_1_input具有3个维度,但是具有形状的数组(2,1)

这是一个重现问题的SSCCE(显然你需要kerasnumpy来运行它)

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)而不是三维输入......

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