Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 参数数量和LSTM架构的粗略估计_Tensorflow_Neural Network_Keras_Lstm - Fatal编程技术网

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

Tensorflow 参数数量和LSTM架构的粗略估计,tensorflow,neural-network,keras,lstm,Tensorflow,Neural Network,Keras,Lstm,我正在研究的问题是二进制分类。我有大约150个序列,其中每个序列有130000个时间步,其中每个时间步有2个特征,shape=(1130000,2)。每个序列都标记为“1”或“0”。我想训练一个lstm网络,在这个网络的最后,给它一个130000个时间步序列,每个时间步有2个特征,将预测“1”或“0”。因此,我心目中的问题是“多对一”,对吗 1) 如果我继续训练这些序列中的120个,剩下的30个用于验证,那么模型的参数数量应该大致是smth,比如120x130000x2=312000个参数? 例

我正在研究的问题是二进制分类。我有大约150个序列,其中每个序列有130000个时间步,其中每个时间步有2个特征,shape=(1130000,2)。每个序列都标记为“1”或“0”。我想训练一个lstm网络,在这个网络的最后,给它一个130000个时间步序列,每个时间步有2个特征,将预测“1”或“0”。因此,我心目中的问题是“多对一”,对吗

1) 如果我继续训练这些序列中的120个,剩下的30个用于验证,那么模型的参数数量应该大致是smth,比如120x130000x2=312000个参数? 例如,约4000个单位的LSTM层

2) 网络应该是有状态的吗?还是不

我所认为的模型是smth,如:

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)
对该方法有何建议?我的想法正确吗

此外,可以使用Keras提供的
多gpu\U模型()
在4个gpu中并行训练此LSTM


我是否应该为每个样本提供更多的样本和更少的时间步长?

参数:

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

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

  • 4*(输入特征*单位+单位²+单位)=16.012.000--
  • 提示:4000个单位通常太多了
您的密集层(4000个输入特征和1个单元)将具有:

  • 输入功能*单位+单位=4001
有状态?

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

因此,您可以使用
input\u-shape=(130000,2)
而不是
batch\u-input\u-shape

您的训练数据可以是形状为(150130000,2)的单个数组。或者,如果您将训练和测试数据分成两个数组:(120130000,2)和(30130000,2)

GPU


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

我如何确定我需要多少个单位才能获得如此数量的数据?我如何开始?任何初步计算?例如,以100个单位开始LSTM?或者将不匹配?没有正确的方法答案是肯定的,这将取决于你的序列学习的复杂程度。但100确实是一个很好的开始。我是否应该为每个样本提供更多的样本和更少的时间步?我是否应该以另一种方式转换数据集?它们真的是150个不同的序列吗?你是否想要确切的150个分类?如果它们是150个序列,一切都是正确的。我我将它们视为不同的。这让我不确定。我有七个大序列,每个序列有百万个时间步,我将它们分割成每个片段。结果形成了我提到的形状。每个被分割的片段都被分配到了序列的类别。