Keras简单前馈网络输入形状错误

时间:2019-08-08 14:55:58

标签: python python-3.x machine-learning keras tf.keras

我正在尝试在Keras中训练一个非常简单的前馈网络。我想给网络1800个数字,并激活6个输出中的1个。

我的模型设置如下:

model = keras.Sequential([
    keras.layers.Dense(256, input_dim = 1800, activation=tf.nn.relu),
    keras.layers.Dense(48, activation=tf.nn.relu),
    keras.layers.Dense(6, activation=tf.nn.softmax)
])

我的数据设置如下:

它分为两个Python列表training_datatraining_labels

training_labels中的元素是一个Python列表,其中包含6个数字,如下所示:

[0, 0, 0, 0, 1, 0]

training_data中的元素是一个包含1800个数字的Python列表,如下所示:

[15, 155, 1200, 1, ... ]

总共有1500个示例。

为了适合模型,我正在做

model.fit(training_data, training_labels, batch_size=1)

但是我得到了错误:

ValueError: Error when checking input: expected dense_1_input to have shape (None, 1800) but got array with shape (150, 1)

我一直在弄乱我的数组的形状,现在输入变暗了一个小时,但没有成功。我在做什么错了?

2 个答案:

答案 0 :(得分:3)

如评论中所述,您可能对数据的形状有误解。为了证明这一点,请查看下面的代码。

import numpy as np

training_data = np.random.rand(1500, 1800)
training_labels = np.ones((1500, 6))
model = keras.Sequential([
    keras.layers.Dense(256, input_dim = 1800, activation=tf.nn.relu),
    keras.layers.Dense(48, activation=tf.nn.relu),
    keras.layers.Dense(6, activation=tf.nn.softmax)
])
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(training_data, training_labels, batch_size=1)

此模型进行编译和训练。

答案 1 :(得分:1)

除了已提及的内容外,我建议在将数据输入到您的网络之前添加一行:

import numpy as np

training_data = np.asarray(training_data)
assert(training_data.shape = (1500,1800))