我对Caffe和Deep Learning很新,所以请忍受我缺乏经验和天真的问题。 现在,我想使用FER2013数据集训练GoogleNet(它由面部组成,其目的是识别面部所属的7个类别中的一个)。但是数据不是图像格式而不是48x48 = 2304值的数组,每个值介于0到255之间。因此,为了创建供给Caffe所需的lmdb文件,我编写了以下Python脚本将数组转换为真实图像。
import numpy as np
from PIL import Image
import csv
import itertools
with open('fer2013.csv', 'rb') as f:
mycsv = csv.reader(f)
i=0
for row in itertools.islice(mycsv, 340):
data = row[1]
data = data.split()
data = map(int, data)
data = np.array(data)
im = Image.fromarray(data.reshape((48,48)).astype('uint8')*255)
directory='imagestotest/'
path_to_save = directory+"image"+str(i)+".jpg"
path = "image"+str(i)+".jpg"
im.save(path_to_save)
i=i+1
with open("testset.txt", "a") as myfile:
myfile.write(path+" "+row[0]+"\n")
然后我使用以下命令准备我的lmdb文件
GLOG_logtostderr = 1 ./deep-learning/caffe/build/tools/convert_imageset --resize_height = 256 --resize_width = 256 --shuffle / home / panos / Desktop / images / home / panos / Desktop / trainingset。 txt / home / panos / Desktop / train_lmdb
最后,我计算了image_mean,我改变了train_val.prototxt并设置了loss1,loss2,loss3层,使num_output = 7(因为我有7个类,0-6)。
我运行我的模型(训练大小:5000和测试大小:340),准确性相当令人失望,接近23%(前1名),88.8%(前5名)。
这可能是超参数配置问题,还是我的输入文件没有正确创建? (因为我担心我的Python烹饪技巧)
如果有帮助,我的主要超参数是:test_iter:7,test_interval:40,base_lr:0.001,动量:0.9,weight_decay:0.0002。
提前致谢!
答案 0 :(得分:1)
要使用预训练模型,您需要先从here下载googlenet模型。现在您可以使用此命令:
caffe train —solver solver.prototxt —weights bvlc_googlenet.caffemodel
训练的主要问题之一是体重初始化。如果没有适当的初始化,模型可能不会收敛,表现出不佳您无法使用相同的值初始化所有权重。其他一些建议是权重应该是稀疏的,正交的,标准化的等等。因此通常建议使用来自预训练模型的权重。它可以称为转移学习。有关权重初始化的详细信息,您可以看到this by karpathy。您还可以看到What are good initial weights in a neural network?如果您想要更深入的了解,请参阅以下文章。
[1] Bengio,Yoshua。 "基于梯度的深层架构培训的实用建议。"神经网络:贸易诀窍。施普林格柏林海德堡,2012年.437-478。
[2] LeCun,Y.,Bottou,L.,Orr,G。B.,and Muller,K。(1998a)。高效的backprop。在神经网络,贸易技巧。
[3] Glorot,Xavier和Yoshua Bengio。 "了解训练深度前馈神经网络的难度。"人工智能和统计国际会议。 2010年。