【问题标题】:How to input a 2D array in Keras-Python?如何在 Keras-Python 中输入二维数组?
【发布时间】:2019-04-05 14:20:25
【问题描述】:

我对机器学习和 keras 非常陌生,一直在尝试输入数据;我的数据看起来像:

[[[0.01363717 0.        ]
  [0.01577874 0.        ]
  [0.01463021 0.        ]]

 [[0.01577874 0.        ]
  [0.01463021 0.        ]
  [0.01006721 0.        ]]

 [[0.01463021 0.        ]
  [0.01006721 0.        ]
  [0.00762504 0.        ]]...]

数据的形状是:(1607, 3, 2)。 我怎样才能通过:

 [[0.01363717 0.        ]
  [0.01577874 0.        ]
  [0.01463021 0.        ]]

作为 512 个 CuDNNLSTM 单元层的输入?

这是我的整个网络:

def create_model():
    model = Sequential()

    model.add(CuDNNLSTM(512, input_shape=(3,2), return_sequences=True, name='inputlstm1'))
    model.add(Dropout(0.2))

    model.add(CuDNNLSTM(512, return_sequences=True,name='lstm2'))
    model.add(Dropout(0.2))

    model.add(CuDNNLSTM(512, return_sequences=True,name='lstm3'))
    model.add(Dropout(0.2))

    model.add(Dense(32, activation='relu', name='dense1'))
    model.add(Dropout(0.2))

    model.add(Dense(1, activation='softmax', name='denseoutput2'))


    # Compile model
    model.compile(
        loss='mse',
        optimizer='adam',
        metrics=['accuracy'],
    )
    return model 

及其合适的:

model=create_model()
history=model.fit(xtrain, ytrain,batch_size=1, epochs=5, validation_data=(xtest, ytest), verbose=1)

【问题讨论】:

    标签: python numpy machine-learning keras numpy-ndarray


    【解决方案1】:

    keras层的构建包括指定传递数组的形状,这里要训练的数组形状是(3,2),有1607个样本,

    input_shape = (3,2)
    X = LSTM(124, activation = 'sigmoid', name='layer1', dropout = 0.4) (temp)
    

    如果你想使用stacked LSTM,你可以使用这个

    input_shape = (3,2)
        X = LSTM(124, activation = 'sigmoid', name='layer1', dropout = 0.4,return_sequences=True) (temp)
        X = LSTM(64, activation = 'sigmoid', name='layer2', dropout = 0.4) (X)
    

    编辑

    def create_model():
        model = keras.models.Sequential()
    
        model.add(keras.layers.CuDNNLSTM(512, input_shape=(3,2), return_sequences=True, name='inputlstm1'))
        model.add(keras.layers.Dropout(0.2))
    
        model.add(keras.layers.CuDNNLSTM(512, return_sequences=True,name='lstm2'))
        model.add(keras.layers.Dropout(0.2))
    
        # The last layer of Stacked LSTM need not to return the input sequences
        model.add(keras.layers.CuDNNLSTM(512,name='lstm3'))
        model.add(keras.layers.Dropout(0.2))
    
        model.add(keras.layers.Dense(32, activation='relu', name='dense1'))
        model.add(keras.layers.Dropout(0.2))
    
        model.add(keras.layers.Dense(1, activation='softmax', name='denseoutput2'))
    
    
        # Compile model
        model.compile(
            loss='mse',
            optimizer='adam',
            metrics=['accuracy'],
        )
        return model 
    

    【讨论】:

    • 我的模型使用 3 个 LSTM 层(每个 512 个神经元)和 2 个密集层(32 和 1)。我在输出时收到此错误:ValueError: Error when checking target: expected output to have 3 dimensions, but got array with shape (1607, 1)
    • 好像只有第一层的错误,要么是输入的测试数据,要么是样本的数量,你需要传递数组的形状,请发布网络有清楚的理解
    • 我更新了帖子 - 我的模型在那里。感谢您的帮助:)
    • @MPatel 我刚刚修改了你的网络,检查更新
    • 非常感谢!!
    【解决方案2】:

    您可以设置batch_size = 1,Keras 会处理它。只需将整个数组放入模型输入即可。

    【讨论】:

      猜你喜欢
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      • 2018-07-24
      • 2018-03-03
      • 1970-01-01
      • 2020-12-04
      • 2021-11-02
      相关资源
      最近更新 更多