2017-08-15 290 views
-2

我使用一些简单的模型:如何解决神经网络的准确性成为不变的问题?

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。如果我添加丢失图层,我会发现acc值会发生变化,但不会超过0.25,大多数时候只会给出更糟糕的结果。

Epoch 290/500 31/31 [==============================] - 0s - loss:9.6283 - acc:0.1290 Epoch 291/500 31/31 [==============================] - 0s - loss: 9.6283 - acc:0.1290 Epoch 292/500 31/31 [==============================] - 0s - loss :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) 
+0

此网络是否进行回归或分类?在分类的情况下有多少班? –

+1

如果你有8个类,其准确性理论上为零,因为它可能每次都触发同一个类,尝试绘制张量板中的激活直方图和分布。什么是输入?这个架构可能太难了。 –

+0

更新了代码,1.使用步骤0.001。 2.尝试/不辍学。 3.将最后一步从relu改为softmax。 4.用于to_category。仍然有同样的结果; – BlueDolphin

回答

0

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

+0

以0.001作为学习率尝试,仍然得到低准确度。 0.064。查看更新的代码。 – BlueDolphin

1

基于行

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

你打算做分类。如果是这样的话,你需要改变

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

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

同时,确保在Y向量是一个热载体。您可以使用keras to_categorical函数实现此目的。

+0

我试图将所有从relu到softmax的激活以及一些relu改为softmax。结果是一样的。请参阅我的更新代码。 – BlueDolphin

+0

@BlueDolphin Y是一个热点矢量吗?或者one_hot_labels是一个热门矢量?你能否包含Y的元素样本? –

+0

@BlueDolphin请勿将所有激活更改为softmax,请保留ReLU激活并仅在最后一层使用softmax。这应该工作。确保您的标签是一种热门编码。 –