python - 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_data
和training_labels
.
元素 fromtraining_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)
该模型编译和训练。
推荐阅读
- vulkan - 我怎么知道 Vulkan 何时不再使用内存,以便我可以覆盖/重用它?
- python - 计算两个数据框中每个用户的事件数
- c# - 使用 IEqualityComparer 从序列中查找不同的元素
::仅等于 - exoplayer2.x - 我无法解析符号“createWithNotificationChannel”
- java - 线程“主”javax.net.ssl.SSLException 中的异常:readHandshakeRecord
- matlab - 我可以在 matlab 中使用 imfilter 计算两个图像之间的相关性吗?
- javascript - 制作一个按下或单击执行功能的按钮,直到松开按钮
- r - 使用 R 中的新 Tesseract OCR 引擎将许多 .pdf 文件转换为 .txt 文件
- jetty - 码头服务器 HttpConnection IllegalStateException: s=DISPATCHED i=true a=null
- sas - 使用数据步骤对两个表进行 SAS 版本控制