【问题标题】:My cnn accuracy goes down after adding one more feature添加一项功能后,我的 cnn 准确性下降
【发布时间】:2019-03-25 17:56:18
【问题描述】:

所以我制作了一个分类两种鸟类的 CNN,它运行良好。之后,我尝试再添加一种类型,但结果很奇怪。我已经在 ai stack exchange 上发布了这个,但他们说最好在这里问,所以我提供了那个帖子的链接。

https://ai.stackexchange.com/q/11444/23452

这是型号代码:

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten, Conv2D, MaxPooling2D
from tensorflow.keras.callbacks import TensorBoard
import pickle
import time as time

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction = 0.333)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))

pickle_in = open("C:/Users/Recep/Desktop/programlar/python/X.pickle","rb")
X = pickle.load(pickle_in)
pickle_in = open("C:/Users/Recep/Desktop/programlar/python/Y.pickle","rb")
Y = pickle.load(pickle_in)

X = X/255.0

node_size = 64

model_name = "agi_vs_golden-{}".format(time.time())


tensorboard = TensorBoard(log_dir='C:/Users/Recep/Desktop/programlar/python/logs/{}'.format(model_name))
file_writer = tf.summary.FileWriter('C:/Users/Recep/Desktop/programlar/python/logs/{}'.format(model_name, sess.graph))


model = Sequential()
model.add(Conv2D(node_size,(3,3),input_shape = X.shape[1:]))
#idk what that shape does except that and validation i have no problem 
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(node_size,(3,3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Flatten())

model.add(Dense(node_size))
model.add(Activation("relu"))

model.add(Dense(1))
model.add(Activation("sigmoid"))

model.compile(loss="binary_crossentropy",optimizer="adam",metrics=["accuracy"])

model.fit(X,Y,batch_size=25,epochs=8,validation_split=0.1,callbacks=[tensorboard])
# idk what the validation is and how its used but dont think it caused the problem

model.save("agi_vs_gouldian.model")

顺便说一句,正如我在原始帖子的 cmets 中所说,我认为可能是网络训练不足,或者我没有足够的数据。所以我尝试增加时代的数量。它有点问题,但我很好奇的是当我有较低的时代时发生了什么?
谁能帮帮我?
我在下面给出张量板图。
顺便说一句,我的数据数组是 rgb 吗?
我怎样才能摆脱这个 %70 的本地最大值?
由于我是这方面的初学者,我不知道什么验证真正有效,但我看到验证图在我遇到问题的第一次训练中保持不变。

【问题讨论】:

  • 即使很难,它的准确度也最高可以达到 %75,它无法正确预测我展示的图片。获得最大 %30 - %40 的准确度
  • 如果我使用较低的 epoch,比如最多 10 个,它会随着时间的推移变得更糟,但不会提高准确性。但是,如果我给它大约 10 它会变得更好而不会变得更糟。我没明白为什么?以及为什么它有 %70 的准确率时仍然很糟糕

标签: machine-learning keras neural-network conv-neural-network


【解决方案1】:

您尝试使用 sigmoid 对三只鸟进行分类。 Sigmoid 适用于二元分类。尝试一个 softmax 激活层,看看效果如何。我建议更换

model.add(Dense(1))
model.add(Activation("sigmoid"))

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

其中 3 是您要分类的鸟类类型的数量。

看看这里,一个非常好的使用softmax作为多类分类的激活层的教程

https://machinelearningmastery.com/multi-class-classification-tutorial-keras-deep-learning-library/

【讨论】:

  • 我只记得我们仍在使用 binary_crossentropy 我想我也需要将其更改为分类
  • 它不起作用,因为不知何故进入最后一个密集层的输入数组被缩小为 (1,0) 的形状,但由于我们有 3 个节点,它期望 (3,) 大小的数组。所以我找不到为什么我的数组缩小到 1 个大小。
  • 在尝试解决形状问题时,我遇到了 sparse_categorical_crossentropy 将它与 3 节点 softmax 一起使用,它工作和训练得非常好,但它提供了一个热输出数组,所以我在网上查找了它你说你需要使用正则化。它会起作用吗?还是固定形状并使用正常的分类更有意义?
猜你喜欢
  • 2017-07-30
  • 1970-01-01
  • 2014-05-27
  • 2020-08-02
  • 2017-09-06
  • 2019-09-23
  • 2019-12-18
  • 1970-01-01
  • 2014-09-22
相关资源
最近更新 更多