如何在keras中训练顺序模型,并给出输出和输入列表?

时间:2019-10-02 15:30:11

标签: python tensorflow keras

我对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,)

任何人都可以告诉我为什么以及如何解决此问题吗?

3 个答案:

答案 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)