我开始学习卷积神经网络,并设计了著名的MNIST和good MNIST模型,并获得了良好的准确性。但后来我转到了另一个琐碎的数据集,那就是Kaggle的猫与狗数据集,但在应用了我所有的概念后,我从斯坦福讲座和Andrew ng讲座中学习到我只能获得80%的准确率。因此,我决定尝试GoogleNet和Alexnet,但这些模型在6个时期都不能给我任何超过50%的准确率。
我想知道GoogleNet和ImageNet是否是为1000个类别的输出而设计的,而不能在2个类别的输出上工作?
在制作自己的模型时,我获得了80%的准确率。我希望著名的GoogleNet模型能给我更高的准确性,但事实并非如此。
下面是我使用的GoogleNet模型:
data=[]
labels=[]
for i in range(0,12499):
img=cv2.imread("train/cat."+str(i)+".jpg")
res = cv2.resize(img, dsize=(224, 224), interpolation=cv2.INTER_CUBIC)
data.append(res)
labels.append(0);
img2=cv2.imread("train/dog."+str(i)+".jpg")
res2 = cv2.resize(img2, dsize=(224,224),interpolation=cv2.INTER_CUBIC)
data.append(res2)
labels.append(1);
train_data, test_data,train_labels, test_labels = train_test_split(data,
labels,
test_size=0.2,
random_state=42)
model=tf.keras.Sequential()
model.add(layers.Conv2D(64,kernel_size=3,activation='relu', input_shape=
(224,224,3)))
model.add(layers.Conv2D(64,kernel_size=3,activation='relu'))
model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))
model.add(layers.Conv2D(128,kernel_size=3,activation='relu'))
model.add(layers.Conv2D(128,kernel_size=3,activation='relu'))
model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))
model.add(layers.Conv2D(256,kernel_size=3,activation='relu'))
model.add(layers.Conv2D(256,kernel_size=3,activation='relu'))
model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))
model.add(layers.Conv2D(512,kernel_size=3,activation='relu'))
model.add(layers.Conv2D(512,kernel_size=3,activation='relu'))
model.add(layers.Conv2D(512,kernel_size=3,activation='relu'))
model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))
model.add(layers.Conv2D(512,kernel_size=3,activation='relu'))
model.add(layers.Conv2D(512,kernel_size=3,activation='relu'))
model.add(layers.Conv2D(512,kernel_size=3,activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dense(4096,activation='relu'))
model.add(Dense(4096,activation='relu'))
model.add(Dense(2,activation='softmax'))
model.compile(optimizer=tf.train.AdamOptimizer(0.001),
loss='sparse_categorical_c rossentropy',metrics=['accuracy'])
model.fit(x=train_data,y=train_labels,batch_size=32,epochs=10,
validation_data=(test_data,test_labels))以上谷歌模型的预期准确率应该超过50%,但经过6个时期后,它的范围在50%到51%之间。
附注:我将最后一个密集层改为2层,而不是1000层,并且我使用Keras API来实现张量流。
任何帮助都将不胜感激。
发布于 2020-05-24 21:58:34
我还没有在googlenet上试过,但我在Alexnet上试过了。在Alexnet上,在密切关注这篇论文后,我设法获得了猫与狗的相对较好的结果(83%)。下面是你可能想做的几件事:
如果您参考幻灯片10上的
,
,
- As in the paper section 3.3, adding a normalization layer at the end of the first two max pooling layers. Keras has stopped supporting LRN but I added batch normalization and it works. (I ran an experiment of a model with batch normalization and without. The accuracy difference is 82% versus 62%
- As in the paper section 4.2, I added two dropout layers (0.5) at the end of the two fully connected layers.
- As in the paper section 5, I changed my batches to 128, SGD momentum of 0.9 and weight decay of 0.0005
经过20个时期的训练,我的准确率达到了83%。在最初的论文中,他们包括数据增强,但我没有在我的实现中包括它。
Keras有一个修改后的googlenet示例。它是从Xecption架构修改而来的,我相信它是初始架构的衍生产品之一。https://keras.io/examples/vision/image_classification_from_scratch/
我已经尝试过了,在运行了15个时期后,准确率约为90%
希望这能有所帮助。
https://stackoverflow.com/questions/57026947
复制相似问题