【问题标题】:LSTM Grid SearchLSTM 网格搜索
【发布时间】:2020-02-28 02:59:03
【问题描述】:

我在下面有一个代码,它实现了一个架构(在网格搜索中),为输入、节点、时期、批量大小和差分时间序列输入生成适当的参数。

我面临的挑战是将神经网络从只有一个 LSTM 隐藏层转换为多个 LSTM 隐藏层。

目前,我只能使用 Dense 类型的隐藏层运行代码,不会抛出任何错误,否则会出现维度错误、元组错误等。

问题仅在神经网络架构部分持续存在。

有效的原始代码:

def model_fit(train, config):
    # unpack config
    n_input, n_nodes, n_epochs, n_batch, n_diff = config

    # Data
    if n_diff > 0:
        train = difference(train, n_diff)

    # Time series to supervised format
    data = series_to_supervised(train, n_in=n_input)

    train_x, train_y = data[:, :-1], data[:, -1]

    # Reshaping input data into [samples, timesteps, features]
    n_features = 1
    train_x = train_x.reshape((train_x.shape[0], train_x.shape[1], n_features))

    # Define model for (Grid search architecture)
    model = Sequential()
    model.add(LSTM(n_nodes, activation='relu', input_shape=(n_input, n_features)))
    model.add(Dense(n_nodes, activation='relu'))
    model.add(Dense(n_nodes, activation='relu'))
    model.add(Dense(n_nodes, activation='relu'))
    model.add(Dense(1))

    # Compile model (Grid search architecture)
    model.compile(loss='mse', optimizer='adam')

    # fit model
    model.fit(train_x, train_y, epochs=n_epochs, batch_size=n_batch, verbose=0)
    return model

修改后的 LSTM 隐藏层代码,运行失败:

# Define model for (Grid search architecture)
model = Sequential() 
model.add(LSTM(n_nodes, activation='relu', input_shape=(n_input, n_features), return_sequences=True))
model.add(LSTM(n_nodes, activation='relu', return_sequences=True))
model.add(LSTM(n_nodes, activation='relu', return_sequences=True))
model.add(LSTM(n_nodes, activation='relu', return_sequences=True))
model.add(TimeDistributed(Dense(1)))

另一个同样引发错误的变体 - ValueError: Error when checks target: expected time_distributed_4 to have 3 dimensions, but got array with shape (34844, 1)

model = Sequential()
model.add(LSTM(n_nodes, activation='relu', input_shape=(n_input, n_features), return_sequences=True))
model.add(LSTM(n_nodes, activation='relu', return_sequences=False))
model.add(RepeatVector(n_input))
model.add(LSTM(n_nodes, activation='relu', return_sequences=True))
model.add(LSTM(n_nodes, activation='relu', return_sequences=True))
model.add(TimeDistributed(Dense(n_features)))

有任何建议的人可以帮助我吗?

【问题讨论】:

  • 在连接到Dense() 之前,您可能不需要return_sequences=True
  • @KidaeKim 谢谢,它确实解决了我的问题。非常感谢。
  • 未来,考虑使用自动超参数调优包,例如Talos (github.com/autonomio/talos)。

标签: keras neural-network lstm grid-search hyperparameters


【解决方案1】:

尝试在最后一层设置return_sequences=False。

【讨论】:

  • 这更像是一条评论
猜你喜欢
  • 2019-10-15
  • 2013-09-14
  • 2019-03-25
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 2017-02-22
  • 2018-10-10
  • 2016-08-29
相关资源
最近更新 更多