粗略估计参数数量和LSTM架构

时间:2018-01-15 10:28:33

标签: tensorflow neural-network keras lstm

我正在处理的问题是二进制分类。我有大约150个序列,每个序列有130000个时间步长,其中每个时间步长有2个特征,shape =(1,130000,2)。这些序列中的每一个都标记为" 1"或" 0"。我想训练一个网络,最后给它一个130000时间序列,每个网络有两个特征,将预测" 1"或" 0"。因此,我脑海中浮现的问题是“很多人”。正确?

1)如果我继续训练120个这些序列,其余30个用于验证,那么模型的参数数量应该大致为120x130000x2 = 31,200,000个参数? 例如,LSTM层有~4000个单位?

2)网络应该是有状态的吗? <或者

我认为这个模型很像:

model = Sequential()
model.add(LSTM(units=4000,batch_input_shape=(1, 130000,2),return_sequences=False,stateful=True, 
kernel_initializer='RandomNormal'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='sgd', metrics=['accuracy'])

history = model.fit(X_train, Y_train,validation_data=(X_test, Y_test),shuffle=False, epochs=5, batch_size=1, verbose=1)

有关方法的任何建议吗?我是以正确的方式思考的吗?

此外,这个LSTM可以使用Keras的multi_gpu_model()以4 gpus并行训练吗?

每个样品我应该有更多的样品和更少的时间步吗?

1 个答案:

答案 0 :(得分:-1)

<强>参数:

参数(如Keras称之为“模型的权重”)不依​​赖于序列长度或序列数。它们仅依赖于输入“特征”(= 2)和单位数。

你的第一层(将2个特征作为输入,包含4000个单元格将具有:

  • 4 *(inputFeatures * units +units²+ units)= 16.012.000 --- See details
  • 提示:4000个单位往往过多。

您的密集层(4000个输入要素和1个单位)将具有:

  • inputFeatures * units + units = 4001

<强>有状态吗

如果您的任务只是您描述的任务(对整个序列进行分类),并且在模型中一次处理整个序列时没有任何内存问题,那么您无需使用{{ 1}} 即可。这只会给代码增加不必要的复杂性。

因此,您可以使用stateful=True代替input_shape=(130000,2)

您的训练数据可以是一个形状单一的阵列(150,130000,2)。或者,如果划分训练和测试数据,则有两个数组:(120,130000,2)和(30,130000,2)。

<强>的GPU

不幸的是我没有那个答案。但我知道LSTM在GPU上的速度非常慢。您可能想要探索CuDNNLSTM层。