首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cifar 100数据预训练cifar 10网络

使用cifar 100数据预训练cifar 10网络
EN

Stack Overflow用户
提问于 2019-11-14 13:36:47
回答 1查看 518关注 0票数 2

为了进行优化,您将使用来自CIFAR-100数据集的“bus”和“tiger”类的数据。您的任务是了解如何对预先训练的CNN模型进行微调,使用训练数据(我认为每个类有500张图像)“bus”和“tiger”类对网络进行微调,并使用相同2个类的测试数据(每个类100张图像)验证准确性。可以在预先训练的模型的所选层上执行微调。当您微调最后一层、最后两层、最后三层、最后四层和所有五层时,需要记录测试精度

我的第一个问题是如何只使用cifar100中的总线和老虎来训练模型?第二个问题是如何微调最后一层,最后两层等。

我正在进行CIFAR10的预训,然后想在公交车和老虎上使用,从cifar100到finetune。

EN

回答 1

Stack Overflow用户

发布于 2019-11-14 17:38:01

我的第一个问题是如何只使用cifar100中的bus和

来训练模型?

实际上,这取决于你想要实现什么。请注意,在CIFAR10中没有Tiger或Bus类。您可以在CIFAR10上使用预先训练好的网络,只为两个类(老虎和巴士)创建一个新的分类器,或者将它们添加到现有的10个类中,这样您将获得12个类的分类器。在这两种情况下,您必须将最后一层的大小从10修改为2或12。

您只需要从CIFAR100集合中提取代表老虎或公交车的图片,并将它们添加到您的训练集中。

第二个问题是如何优化最后一层,最后两层,等等。

您可以冻结在训练过程中不想修改的层。冻结意味着在训练过程中,该考虑层中的权重不会通过损失函数的梯度进行更新。

如何做到这一点取决于您所使用的框架。例如,在Keras中,可以将不想训练的层的trainable参数设置为false。参见下面的示例如何冻结简单CNN中的所有图层,最后两个图层除外。

代码语言:javascript
复制
from keras import Sequential
from keras.layers import Conv2D, Flatten, Dense

model = Sequential()
model.add(Conv2D(64, kernel_size=3, activation='relu', input_shape=(32, 32, 3)))
model.add(Conv2D(32, kernel_size=3, activation='relu'))
model.add(Conv2D(16, kernel_size=3, activation='relu'))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(10, activation='softmax'))

for layer in model.layers[:-2]:
    layer.trainable = False
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58850038

复制
相关文章

相似问题

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