【问题标题】:Properly specifying model input sizes when instantiating and fitting simple keras model?在实例化和拟合简单的 keras 模型时正确指定模型输入大小?
【发布时间】:2017-07-05 20:47:36
【问题描述】:

我们刚刚开始在课堂上使用keras,我似乎被困在我的第一个作业中。首先,我们要在keras 中构建一个简单的感知器,然后针对各种真值表对其进行训练和测试。

我从简单的 Not 关系开始。对于输入和输出,我在numpy 中生成了两个(2, 1) 形状的矩阵,代表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) 的输入,而不是一个 3 维输入...

【问题讨论】:

    标签: python-3.x tensorflow keras


    【解决方案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 也发生了类似的问题。

    【讨论】:

    • 啊,好吧,在仔细查看了model.summary() 的输出后,我自己有一些接近这一点,但并非完全如此。但现在说得通了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 2017-12-14
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 2020-08-19
    相关资源
    最近更新 更多