Tensorflow LSTM网络不从序列中学习。使用Keras、TF后端安装不足或过度安装
提前感谢你的帮助 我正在处理一个4个字符序列的问题。我在训练集中有大约18000个序列。使用Keras+TensorFlow后端。可预测的字符总数为52个 当我使用下面在“网络a”中看到的一个网络,需要学习大约49000个参数时,即使在300个历史时期内,网络的过度拟合和验证损失也会急剧增加。无论哪种方式,验证精度都不会达到20% 当我使用下面的“网络B”时,需要学习大约8K的参数,网络似乎无法学习。即使在3000个时期内,训练数据的准确率也不会超过40%,验证集的准确率也不会超过10% 我在中间尝试过很多配置,没有什么真正的成功。 你有什么建议吗? 这两种情况都使用以下配置:Tensorflow LSTM网络不从序列中学习。使用Keras、TF后端安装不足或过度安装,tensorflow,keras,deep-learning,lstm,recurrent-neural-network,Tensorflow,Keras,Deep Learning,Lstm,Recurrent Neural Network,提前感谢你的帮助 我正在处理一个4个字符序列的问题。我在训练集中有大约18000个序列。使用Keras+TensorFlow后端。可预测的字符总数为52个 当我使用下面在“网络a”中看到的一个网络,需要学习大约49000个参数时,即使在300个历史时期内,网络的过度拟合和验证损失也会急剧增加。无论哪种方式,验证精度都不会达到20% 当我使用下面的“网络B”时,需要学习大约8K的参数,网络似乎无法学习。即使在3000个时期内,训练数据的准确率也不会超过40%,验证集的准确率也不会超过10% 我在中
rms = keras.optimizers.RMSprop(lr=0.01, rho=0.9, epsilon=None, decay=0.0)
model.compile(loss='categorical_crossentropy', optimizer=rms, metrics=['accuracy'])
网络A
Shape of input matrix:
4 1
Shape of Output:
57
“网络B”
我可以看到您的输入形状是“4x1”,您直接将其输入到LSTM,您的输入格式是什么?因为在这里,似乎每个时间步(对于每个字符)都有一个1的维度(所以可能只是传递了一个int?) 正如您所说,您要处理的是4个字符的序列,您必须将它们视为分类变量,并以适当的方式对它们进行编码
例如,您可以one hot对它们进行编码,或者使用
嵌入层将它们嵌入到某个维度。我可以看到您的输入形状是“4x1”,您直接将其输入到LSTM,您的输入格式是什么?因为在这里,似乎每个时间步(对于每个字符)都有一个1的维度(所以可能只是传递了一个int?)
正如您所说,您要处理的是4个字符的序列,您必须将它们视为分类变量,并以适当的方式对它们进行编码
例如,您可以one hot对它们进行编码,或者使用嵌入层将它们嵌入到某个维度。谢谢您的回复。输入序列用自定义dict(字母到数字)编码并归一化,输出预测值使用np.UTILStategorical类似:#normalize input ninput=ninput/float(vocab)#prepare output for Neural Network,noutput=np_utils.to_categorical(noutput)示例(在np.utils之前)序列示例:创建的序列示例:[38,33,18,13]->--下一个值:-->2是否直接输入类似于[38,33,18,13]的内容作为LSTM的输入?网络将使用标准化为ninput=ninput/float(vocab)的[38,33,18,13]进行输入。ninput包含所有的输入序列,但这是一个字符序列,这不是正确的处理方式。这不是对字符序列的正确预处理,因为每个字符都是一个分类变量,这里您将它们视为数字数据,但您不能说例如字符“a”是字符“b”的两倍。您可以对它们进行一次热编码,每个字符都有一个向量(大小为b)字符位置满0和1,输入为“4 x vocab”。或者您可以删除代码的规范化部分,并添加一个“EmbeddingLayer”,它将嵌入序列的每个字符(您可以查看Keras的“EmbeddingLayer”文档)。感谢您的回复。输入序列用自定义dict(字母到数字)编码并归一化,输出预测值使用np.UTILStategorical类似:#normalize input ninput=ninput/float(vocab)#prepare output for Neural Network,noutput=np_utils.to_categorical(noutput)示例(在np.utils之前)序列示例:创建的序列示例:[38,33,18,13]->--下一个值:-->2是否直接输入类似于[38,33,18,13]的内容作为LSTM的输入?网络将使用标准化为ninput=ninput/float(vocab)的[38,33,18,13]进行输入。ninput包含所有的输入序列,但这是一个字符序列,这不是正确的处理方式。这不是对字符序列的正确预处理,因为每个字符都是一个分类变量,这里您将它们视为数字数据,但您不能说例如字符“a”是字符“b”的两倍。您可以对它们进行一次热编码,每个字符都有一个向量(大小为b)字符位置满0和1,输入为“4 x vocab”。或者,您可以删除代码的规范化部分,并添加一个“EmbeddingLayer”,它将嵌入序列的每个字符(您可以查看Keras的“EmbeddingLayer”文档)。
Layer (type) Output Shape Param #
=================================================================
lstm_3 (LSTM) (None, 4, 256) 264192
_________________________________________________________________
dropout_2 (Dropout) (None, 4, 256) 0
_________________________________________________________________
lstm_4 (LSTM) (None, 4, 128) 197120
_________________________________________________________________
dropout_3 (Dropout) (None, 4, 128) 0
_________________________________________________________________
lstm_5 (LSTM) (None, 32) 20608
_________________________________________________________________
dense_1 (Dense) (None, 128) 4224
_________________________________________________________________
dropout_4 (Dropout) (None, 128) 0
_________________________________________________________________
dense_2 (Dense) (None, 57) 7353
_________________________________________________________________
activation_1 (Activation) (None, 57) 0
=================================================================
Total params: 493,497
Trainable params: 493,497
Non-trainable params: 0
Shape of input matrix:
4 1
Shape of Output:
57
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm_6 (LSTM) (None, 4, 32) 4352
_________________________________________________________________
dropout_5 (Dropout) (None, 4, 32) 0
_________________________________________________________________
lstm_7 (LSTM) (None, 16) 3136
_________________________________________________________________
dropout_6 (Dropout) (None, 16) 0
_________________________________________________________________
dense_3 (Dense) (None, 57) 969
_________________________________________________________________
activation_2 (Activation) (None, 57) 0
=================================================================
Total params: 8,457
Trainable params: 8,457
Non-trainable params: 0