我正在处理的问题是二进制分类。我有大约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并行训练吗?
每个样品我应该有更多的样品和更少的时间步吗?
答案 0 :(得分:-1)
<强>参数:强>
参数(如Keras称之为“模型的权重”)不依赖于序列长度或序列数。它们仅依赖于输入“特征”(= 2)和单位数。
你的第一层(将2个特征作为输入,包含4000个单元格将具有:
您的密集层(4000个输入要素和1个单位)将具有:
<强>有状态吗
如果您的任务只是您描述的任务(对整个序列进行分类),并且在模型中一次处理整个序列时没有任何内存问题,那么您无需使用{{ 1}} 即可。这只会给代码增加不必要的复杂性。
因此,您可以使用stateful=True
代替input_shape=(130000,2)
。
您的训练数据可以是一个形状单一的阵列(150,130000,2)。或者,如果划分训练和测试数据,则有两个数组:(120,130000,2)和(30,130000,2)。
<强>的GPU 强>
不幸的是我没有那个答案。但我知道LSTM在GPU上的速度非常慢。您可能想要探索CuDNNLSTM层。