我想使用转移学习对图像进行分类。那是我第一次尝试使用转移学习。我目前使用VGG16模型。由于我的数据与原始训练模型中使用的图像完全不同,因此理论告诉我,我应该训练许多层,包括隐蔽层在内的潜在层。
我的计算机具有8GO内存,使用i5 2.40 Hz无gpu。我的数据集很小(3000张图像),但是数据以矩阵形式存储在python内存中,而不是保存在文件夹中。这些图片几乎占用了我所有的RAM
原始的VGG16模型具有1.3亿个参数。如果仅考虑隐藏层的权重,并在最后创建2个新的(分别为512和256的小层)全连接层,那么我仍然需要训练15M参数,总共30m参数。
我实际上使用了224 * 224的图像尺寸,例如vgg16输入
我的计算机需要1H30才能持续1个纪元。在10个时间点时,我的准确度较差(从头开始使用转换网,准确率则为50%和90%)。
我的问题:
计算机崩溃,我不知道为什么。可能是RAM问题吗?既然vgg开始训练一个纪元,而其他纪元只是调整体重,其他纪元应该不会影响记忆力?
我应该解冻输入层以使用尺寸减小的图像来减少内存问题和训练时间吗?它不会影响太多的转换网络性能吗?
以15M可训练参数计算1个历元需要1h30正常吗?由于我仍然需要找到要解冻的最佳层数,新的完全连接层的形状,学习率,otpimizer ...对于我来说,我似乎无法在相当长的时间内用当前的竞争资源优化转移学习模型< / p>
您对转学有什么建议吗?
谢谢
答案 0 :(得分:1)
没有关于转移学习的具体技巧,但是如果您缺乏计算能力,考虑过渡到云资源可能会有所帮助。 AWS,Google云,Azure或其他服务可以以合理的价格获得。
它们中的大多数还提供一些免费资源,这些资源足以用于小型ML项目或学生任务。 值得注意的是:
大多数这些服务还提供免费的常规计算功能,您还可以在该功能上运行ML任务,但这可能需要进行一些其他的手动调整。