Python 为什么不提高验证的准确性?
我面临的问题是检测机器生成的文本和人工生成的文本。我有一个包含500000个培训数据、10000个验证数据和10000个测试数据的数据集,请告诉我如何解决我的问题?为什么不提高验证的准确性Python 为什么不提高验证的准确性?,python,tensorflow,deep-learning,nlp,Python,Tensorflow,Deep Learning,Nlp,我面临的问题是检测机器生成的文本和人工生成的文本。我有一个包含500000个培训数据、10000个验证数据和10000个测试数据的数据集,请告诉我如何解决我的问题?为什么不提高验证的准确性 model=Sequential() model.add(Embedding(300000,60,input_length=300)) model.add(LSTM(60, return_sequences=True,recurrent_dropout=0.5)) model.add(Dropout(0.5)
model=Sequential()
model.add(Embedding(300000,60,input_length=300))
model.add(LSTM(60, return_sequences=True,recurrent_dropout=0.5))
model.add(Dropout(0.5))
model.add(LSTM(60, recurrent_dropout=0.5))
model.add(Dense(1, activation='sigmoid'))
print(model.summary())
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])
history = model.fit(x_train, y_train ,epochs=10,batch_size=1000,validation_data=(x_valid,y_valid))
验证精度:
Found 499693 uniqe tokens.
shape of data tensor: (500000, 300)
shape of labels tensor: (500000,)
Found 10000 uniqe tokens.
shape of data tensor: (10000, 300)
shape of labels tensor: (10000,)
Found 10000 uniqe tokens.
shape of data tensor: (10000, 300)
shape of labels tensor: (10000,)
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding (Embedding) (None, 300, 60) 18000000
_________________________________________________________________
lstm (LSTM) (None, 300, 60) 29040
_________________________________________________________________
dropout (Dropout) (None, 300, 60) 0
_________________________________________________________________
lstm_1 (LSTM) (None, 60) 29040
_________________________________________________________________
dense (Dense) (None, 1) 61
=================================================================
Total params: 18,058,141
Trainable params: 18,058,141
Non-trainable params: 0
_________________________________________________________________
None
Epoch 1/10
500/500 [==============================] - 1920s 4s/step - loss: 0.3249 - acc: 0.8658 - val_loss: 1.0808 - val_acc: 0.4999
Epoch 2/10
500/500 [==============================] - 1907s 4s/step - loss: 0.2498 - acc: 0.9008 - val_loss: 1.5077 - val_acc: 0.4965
Epoch 3/10
500/500 [==============================] - 1902s 4s/step - loss: 0.1034 - acc: 0.9608 - val_loss: 2.9275 - val_acc: 0.4963
为什么只运行了3个时代的模型?我建议您运行它大约20个时代,然后看看验证的准确性是否没有降低。我可以告诉你的是,你需要改变你的这行代码:
model.add(Embedding(300000,60,input_length=300))
为此:
model.add(Embedding(k, 60,input_length=300))
您可以将k设置为256或512或与之相近的数字。但30万美元太多了。这样,当主要工作是编码器和解码器时,您的网络将更加关注嵌入层
另一件事,您应该在编码器和解码器中增加LSTM单位(可能是128或256),并删除反复出现的_dropout参数(因为,您在编码器之后使用dropout层退出)。如果这仍然没有帮助,那么您甚至可以向您的模型添加批处理规范化层。为什么您只运行了3个时代的模型?我建议您运行它大约20个时代,然后看看验证的准确性是否没有降低。我可以告诉你的是,你需要改变你的这行代码:
model.add(Embedding(300000,60,input_length=300))
为此:
model.add(Embedding(k, 60,input_length=300))
您可以将k设置为256或512或与之相近的数字。但30万美元太多了。这样,当主要工作是编码器和解码器时,您的网络将更加关注嵌入层
另一件事,您应该在编码器和解码器中增加LSTM单位(可能是128或256),并删除反复出现的_dropout参数(因为,您在编码器之后使用dropout层退出)。如果这仍然没有帮助,那么您甚至可以向模型中添加批量标准化层。10个时代后的验证精度是多少?验证精度:49.6您的模型明显过拟合,请尝试调整退出值。10个时代后的验证精度是多少?验证精度:49.6您的模型明显过拟合,尝试调整退出值。