Machine learning 在训练keras模型时,精度保持不变。原因可能是什么?
我一直在尝试使用keras训练一个简单的skip-gram-word2vec模型。 经过一段时间的训练,我注意到准确度没有任何变化 我尝试过的事情: 1.我试着把优化器改成adam,rmsprop。 2.对于sgd,我尝试过将学习从1.0逐步改为0.000001 3.我试着改变批量大小 还是不走运 下面是一些代码Machine learning 在训练keras模型时,精度保持不变。原因可能是什么?,machine-learning,neural-network,deep-learning,keras,Machine Learning,Neural Network,Deep Learning,Keras,我一直在尝试使用keras训练一个简单的skip-gram-word2vec模型。 经过一段时间的训练,我注意到准确度没有任何变化 我尝试过的事情: 1.我试着把优化器改成adam,rmsprop。 2.对于sgd,我尝试过将学习从1.0逐步改为0.000001 3.我试着改变批量大小 还是不走运 下面是一些代码 def make_model(self,vocab_size=256,vec_dim=100): model=Sequential() model.add(Dense(
def make_model(self,vocab_size=256,vec_dim=100):
model=Sequential()
model.add(Dense(vec_dim,activation="sigmoid",input_dim=vocab_size))
model.add(Dense(vocab_size,activation="sigmoid"))
sgd=SGD(lr=1.0)
model.compile(loss="categorical_crossentropy",optimizer=sgd,metrics=["accuracy"])
return model
def _get_callbacks(self):
earlystop=EarlyStopping(monitor="val_loss",min_delta=0.0001,patience=10,verbose=2)
checkpoint=ModelCheckpoint("checkpt.hdf5",period=10,verbose=2)
reducelr=ReduceLROnPlateau(monitor="val_loss",factor=0.1,patience=5,verbose=2)
return [earlystop,checkpoint,reducelr]
def train(self,model,X,y):
model.fit(X,y,nb_epoch=1000,callbacks=self._get_callbacks(),validation_split=0.1,verbose=2,batch_size=300)
model.save("model.hdf5")
对于每个单词,X是len 256的一个热向量
在len 256的一个热向量中的y表示X上下文中的跳过字
例如,如果序列是[2,6,5,7,9]
X将是
[5,5,5,7,7,7…]
我会的
[2,6,7,9,6,5,9...]
对于序列中的每个单词,依此类推
这就是我尝试训练时发生的情况:
9s - loss: 4.5012 - acc: 0.1794 - val_loss: 4.5873 - val_acc: 0.1327
Epoch 2/1000
9s - loss: 4.2679 - acc: 0.1801 - val_loss: 4.8339 - val_acc: 0.1327
Epoch 3/1000
9s - loss: 4.2363 - acc: 0.1801 - val_loss: 4.7040 - val_acc: 0.1327
Epoch 4/1000
9s - loss: 4.2102 - acc: 0.1801 - val_loss: 4.6947 - val_acc: 0.1327
Epoch 5/1000
9s - loss: 4.1882 - acc: 0.1801 - val_loss: 4.6625 - val_acc: 0.1327
Epoch 6/1000
9s - loss: 4.1777 - acc: 0.1801 - val_loss: 4.6303 - val_acc: 0.1327
我等了大约50个时代,acc仍然没有改变
知道我做错了什么吗?每次我使用keras时都会遇到这个问题,即使是在培训其他模型(如使用LSTM生成RNNs文本的语言建模)时也是如此。也许你的学习率太高了。您可以尝试将其设置为0.0001
sgd=SGD(lr=0.0001)
很可能没有什么错误,这是您从数据和模型中获得的最佳精确度。@thc使用单隐层神经网络,人们对跳过图的精确度已超过90%。我同意数据可能是问题所在。它似乎太少了,无法划分为256个类别。但这个问题甚至在其他模型和数据上也出现了。我通常可以在改变批量大小后四处走动。但我真的很困惑批量大小如何能产生如此剧烈的影响。在这种情况下,即使批量大小调整也不起作用。尝试将激活从
sigmoid
更改为ReLU
?当您使用sigmoid
时,可能层响应已饱和。在具有单个隐藏层的网络上饱和?这甚至不是一个深度网络。我认为不太可能。但仍然如此。我会尽量让你知道的。换成relu是不行的。