Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.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
Python 为什么不提高验证的准确性?_Python_Tensorflow_Deep Learning_Nlp - Fatal编程技术网

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

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)

我面临的问题是检测机器生成的文本和人工生成的文本。我有一个包含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.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您的模型明显过拟合,尝试调整退出值。