我对Keras和整个机器学习都是陌生的,但这就是我想要的。我有一个输入列表(每个输入节点1个值)和一个目标列表(每个输出节点1个值)。
input_list = [1, 0, 1, 0, 1, 0] # maybe longer
wanted_output_list = [1, 0, 0, 0] # also maybe longer
现在我想把这些作为输入来训练我的神经网络:
# create model
model = Sequential()
# get number of columns in training data
n_cols = 6
# add model layers
model.add(Dense(6, activation='relu', input_shape= (n_cols,)))
model.add(Dense(2, activation='relu'))
model.add(Dense(2, activation='relu'))
model.add(Dense(3))
# compile the model
model.compile(optimizer='adam', loss='mean_squared_error')
# train model
model.fit(input_list, wanted_output_list, validation_split=0.2, epochs=30)
但是我收到此错误:
ValueError: Error when checking input: dense_1_input to have shape (6,) but got with shape (1,)
任何人都可以告诉我为什么以及如何解决此问题吗?
答案 0 :(得分:0)
定义模型时,您指定了一个模型,该模型接受具有6个特征的输入,并输出具有3个分量的向量。但是,您训练的数据的形状不正确(顺便说一下,您的标签也不正确)。您应该按照定义模型的方式来塑造数据。在这种情况下,这意味着您的训练数据的每个样本都是具有6个成分的向量,每个标签都是具有3个成分的向量。
当训练具有多个输入的模型时,Keras需要一个numpy array
(或2D数组)列表,请参见documentation。
x :输入数据。可能是:
- 一个Numpy数组(或类似数组的数组)或数组列表(如果模型具有多个输入)。
因此,根据您的模型定义,您可以通过以下方式调整训练数据:
import numpy as np
# your data, in this case 2 datapoints
X = np.array([[1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1]])
# the corresponding labels
y = np.array([[1, 0, 0], [0, 1, 0]])
然后通过调用fit
训练模型。
model.fit(x, y, epochs=30)
答案 1 :(得分:0)
如果您实际上是在询问具有多个输入和输出而不是多个功能(不是同一件事),则无法使用顺序API来完成,而必须使用Keras Functional API。在这里,您可以定义多个输入和输出,然后根据您的建议将其作为列表传递。
My answer也可能对上个星期的这个主题有帮助。
答案 2 :(得分:-1)
请将输入要素和类转换为数组,并将最后一层中的节点数设置为y中的类数。 请参考下面的代码:
X = np.array([[1,0,1,0,1,0]])
y = np.array([[1,0,0,0]])
model = Sequential()
n_cols = 6
model.add(Dense(6,activation ='relu',input_shape =(n_cols,)))
model.add(Dense(2,activation ='relu'))
model.add(Dense(2,activation ='relu'))
model.add(Dense(5))
model.compile(optimizer ='adam',loss ='mean_squared_error')
model.fit(X,y,epochs = 30)