首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Googlenet和Alexnet模型无法在Cat vs Dog数据集上提供准确性

使用Googlenet和Alexnet模型无法在Cat vs Dog数据集上提供准确性
EN

Stack Overflow用户
提问于 2019-07-14 19:21:21
回答 1查看 328关注 0票数 0

我开始学习卷积神经网络,并设计了著名的MNIST和good MNIST模型,并获得了良好的准确性。但后来我转到了另一个琐碎的数据集,那就是Kaggle的猫与狗数据集,但在应用了我所有的概念后,我从斯坦福讲座和Andrew ng讲座中学习到我只能获得80%的准确率。因此,我决定尝试GoogleNet和Alexnet,但这些模型在6个时期都不能给我任何超过50%的准确率。

我想知道GoogleNet和ImageNet是否是为1000个类别的输出而设计的,而不能在2个类别的输出上工作?

在制作自己的模型时,我获得了80%的准确率。我希望著名的GoogleNet模型能给我更高的准确性,但事实并非如此。

下面是我使用的GoogleNet模型:

代码语言:javascript
复制
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来实现张量流。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2020-05-24 21:58:34

我还没有在googlenet上试过,但我在Alexnet上试过了。在Alexnet上,在密切关注这篇论文后,我设法获得了猫与狗的相对较好的结果(83%)。下面是你可能想做的几件事:

如果您参考幻灯片10上的

  1. Li http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture9.pdf的CS231n注释,您会注意到输入层应该是227 x 227。他们还提供了数学上的解释。

  1. ,我开始尝试和原始论文密切相关的其他项目:https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf,这些包括:

代码语言:javascript
复制
- 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

  1. 正如你最初问题中的一条评论所指出的那样,我的最后一层也是具有sigmoid函数的单一维度。

经过20个时期的训练,我的准确率达到了83%。在最初的论文中,他们包括数据增强,但我没有在我的实现中包括它。

Keras有一个修改后的googlenet示例。它是从Xecption架构修改而来的,我相信它是初始架构的衍生产品之一。https://keras.io/examples/vision/image_classification_from_scratch/

我已经尝试过了,在运行了15个时期后,准确率约为90%

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57026947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档