Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras简单前馈网络输入形状误差_Python_Python 3.x_Machine Learning_Keras_Tf.keras - Fatal编程技术网

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

Python Keras简单前馈网络输入形状误差,python,python-3.x,machine-learning,keras,tf.keras,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

我试图在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)
])
我的数据设置如下:

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\u data
training\u标签

training\u labels
中的元素是一个Python列表,包含如下6个数字:

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

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

[0, 0, 0, 0, 1, 0]
[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)) 

“但是得到了形状为(150,1)的数组”。您并没有以数据的形式输入您认为输入的内容打印输出
训练\u data.shape
training\u数据
没有您假设的形状,它的
training\u数据
是一个包含1500个元素的Python列表。每个元素是一个包含1800个整数的列表
len(training\u data)
返回1500,我可以断言其中每个列表的长度为1800。尝试重新调整数据training\u data=np。重新调整(15001800)我使用的是Python列表,而不是NumPy。我将转换成一个NumPy数组,看看会发生什么。好的、干净的、可复制的答案(+1)