如何解决神经网络精度成为不变的问题?

时间:2017-08-15 06:53:04

标签: deep-learning keras keras-layer

我正在使用一些简单的模型:

model = Sequential()

model.add(Dense(12, input_dim=len(allKeys), activation='tanh', kernel_initializer='uniform'))
model.add(Dense(31, activation='tanh'))
model.add(Dense(N, activation='relu'))

model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])

model.fit(X, Y, epochs=500, batch_size=40)

X.shape(31,147) Y.shape(31,13)

X中的值为0或低于1.0时的某些值。 Y是稀疏数组,一行中有一列是1,其余列是0。

acc总是低于0.25。大部分时间只有0.12。如果我添加了dropout图层,我会看到acc值发生变化,但不会超过0.25,大部分时间都会给出更差的结果。

大纪元290/500 31/31 [==============================] - 0s - 损失:9.6283 - acc:0.1290 大纪元291/500 31/31 [==============================] - 0s - 损失:9.6283 - acc:0.1290 大纪元292/500 31/31 [==============================] - 0s - 损失:9.6283 - acc:0.1290

----------------------------更新代码----------------- -------------

model = Sequential()

model.add(Dense(12, input_dim=len(allKeys), activation='tanh', kernel_initializer='uniform'))
model.add(Dense(31, activation='tanh'))
model.add(Dropout(0.2))
model.add(Dense(N, activation='softmax'))

sgd = SGD(lr=0.001, momentum=0.3, decay=0.0, nesterov=False)
model.compile(optimizer=sgd,loss='categorical_crossentropy',metrics=['accuracy'])
one_hot_labels = to_categorical(Y, num_classes=N)

model.fit(X, one_hot_labels, epochs=100, batch_size=40)

2 个答案:

答案 0 :(得分:1)

基于行

Always update snapshots

你打算做分类。如果是这种情况,则需要更改

model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])

model.add(Dense(N, activation='relu'))

另外,确保Y向量是单热矢量。您可以为此目的使用keras to_categorical函数。

答案 1 :(得分:0)

尝试使用学习率。对于这种情况,我看起来默认值太高了。