Machine learning 我的cnn准确度在增加一个功能后下降
所以我制作了一个CNN,对两种鸟类进行分类,效果很好。在那之后,我试着再添加一种类型,但我得到了奇怪的结果。我已经在ai stack exchange上发布了这篇文章,但他们说最好在这里问一下,所以我提供了一个链接到这篇文章 以下是型号代码:Machine learning 我的cnn准确度在增加一个功能后下降,machine-learning,keras,neural-network,conv-neural-network,Machine Learning,Keras,Neural Network,Conv Neural Network,所以我制作了一个CNN,对两种鸟类进行分类,效果很好。在那之后,我试着再添加一种类型,但我得到了奇怪的结果。我已经在ai stack exchange上发布了这篇文章,但他们说最好在这里问一下,所以我提供了一个链接到这篇文章 以下是型号代码: import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout, Acti
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")
顺便说一句,正如我在最初的帖子评论中所说的,我认为可能是网络缺乏培训,或者我没有足够的数据。所以我试着增加历代的数量。这有点像是个问题,但我好奇的是我在较低的时代发生了什么?有人能帮我吗?
下面是张量板图。
顺便说一句,我的数据数组是rgb吗?
我怎样才能去掉这个本地最大值%70?
由于我是这方面的初学者,我不知道什么样的验证真正有效,但我看到验证图在我遇到问题的第一次培训中保持不变
你试着将三种鸟分为乙状结肠。Sigmoid适合于二元分类。试试softmax激活层,看看效果如何。我建议更换
model.add(Dense(1))
model.add(Activation("sigmoid"))
与
其中3是要分类的鸟类类型的数量
看看这里,这是一个很好的使用softmax作为多类分类激活层的教程
即使很难,它的精确度最高可达%75,但无法正确预测我展示的图片。获得最大%30-%40的准确度,如果我使用较低的历元,如10,它会随着时间的推移变得更糟,但不会提高准确度。但如果我给它10分左右,它会变好而不会变差。我不明白为什么?为什么当它有70%的准确度时仍然很糟糕,我只记得我们仍然在使用二进制交叉熵,我想我需要将它分类,因为最后一个密集层的输入数组被缩小到(1,0)的形状,但因为我们有3个节点,所以它需要(3,)大小的数组。所以我找不到为什么我的数组缩小到1个大小。在试图解决形状问题时,我遇到了稀疏的交叉熵,它与3节点softmax一起使用,工作和训练都很好,但它提供了一个热输出数组,所以我在网络中查找,它说你需要使用正则化。行吗?还是固定形状并使用正常的分类更有意义?
model.add(Dense(3, activation='softmax'))