Keras 简单前馈网络输入形状错误
Keras simple feed-forward network input shape error
我正在尝试在 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_data
和 training_labels
。
来自 training_labels
的元素是一个包含 6 个数字的 Python 列表:
[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)
如评论中所述,您可能对数据的形状存在误解。为了证明这一点,请查看下面的代码片段。
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)
此模型编译和训练。
除了上面提到的内容,我建议在将数据输入网络之前添加一行:
import numpy as np
training_data = np.asarray(training_data)
assert(training_data.shape = (1500,1800))
我正在尝试在 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_data
和 training_labels
。
来自 training_labels
的元素是一个包含 6 个数字的 Python 列表:
[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)
如评论中所述,您可能对数据的形状存在误解。为了证明这一点,请查看下面的代码片段。
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)
此模型编译和训练。
除了上面提到的内容,我建议在将数据输入网络之前添加一行:
import numpy as np
training_data = np.asarray(training_data)
assert(training_data.shape = (1500,1800))