【问题标题】:How to solve neural network accuracy become constant issue? [closed]如何解决神经网络精度成为永恒的问题? [关闭]
【发布时间】:2018-01-23 01:50:24
【问题描述】:

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

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)

【问题讨论】:

  • 这个网络是在做回归还是分类?在分类的情况下有多少类?
  • 如果你有 8 个类,其理论上的准确度为零,因为它可能每次都触发相同的类,尝试在 tensorboard 中绘制激活直方图和分布。什么是输入?这种架构可能太难了。
  • 更新了代码,1.使用步骤0.001。 2. 尝试有/没有辍学。 3.最后一步由relu改为softmax。 4. 用于to_category。结果还是一样;
  • 回复:Matias:这是为了分类。共13例。
  • 回复:约瑟夫:张量板很有趣!我想知道我是否可以将它用于 keras。似乎 tensorboard 正在使用 tensorflow.session(),我不知道如何从 keras 访问它。

标签: deep-learning keras keras-layer


【解决方案1】:

基于行

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

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

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

进入

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

另外,确保 Y 向量是 one-hot 向量。为此,您可以使用 keras to_categorical 函数。

【讨论】:

  • 我尝试将所有激活从 relu 更改为 softmax,以及将一些 relu 更改为 softmax。结果是一样的。请查看我的更新代码。
  • @BlueDolphin Y 是 1-hot 向量吗?还是 one_hot_labels 是 1-hot 向量?能否包含 Y 中的元素样本?
  • @BlueDolphin 不要将所有激活更改为 softmax,保留 ReLU 激活并仅在最后一层使用 softmax。这应该有效。确保您的标签是一次性编码的。
  • 两种方案我都试过了,结果是一样的
【解决方案2】:

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

【讨论】:

  • 尝试使用 0.001 作为学习率,但准确率仍然很低。 0.064。查看更新的代码。
猜你喜欢
  • 1970-01-01
  • 2012-06-03
  • 2023-03-29
  • 2023-03-10
  • 1970-01-01
  • 2017-01-24
  • 2016-10-22
  • 1970-01-01
  • 2015-04-24
相关资源
最近更新 更多