微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么不提高验证准确性?

如何解决为什么不提高验证准确性?

我面临的问题是从人为生成的文本中检测机器生成的文本。我有一个包含500,000个训练数据,10,000个验证数据和10,000个测试数据的数据集,请告诉我如何解决我的问题?为什么不提高验证准确性?

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,)
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding (Embedding)        (None,300,60)           18000000  
_________________________________________________________________
lstm (LSTM)                  (None,60)           29040     
_________________________________________________________________
dropout (Dropout)            (None,60)           0         
_________________________________________________________________
lstm_1 (LSTM)                (None,60)                29040     
_________________________________________________________________
dense (Dense)                (None,1)                 61        
=================================================================
Total params: 18,058,141
Trainable params: 18,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,input_length=300))

可以将k设置为256或512或接近它们的数字。但是300000太多了。这样,当主要工作是编码器和解码器时,您的网络将更加专注于嵌入层。

另一件事,您应该同时在编码器和解码器中增加LSTM单位(可能增加到128或256之类的数字),并删除recurrent_dropout参数(因为您将在编码器后使用dropout层退出)。如果仍然不能解决问题,那么您甚至可以将“批量归一化”图层添加到模型中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。