
源码地址:
taki0112/SENet-Tensorflowgithub.com
源码中的训练例子是用cifar10 dataset,你自己开始可以跑一下试试看效果如何。
接下来如果是要训练你自己的数据集,我这里用的是最笨的办法,就是直接把自己的数据集换成cifar10的格式,在把相关的参数改成自己的数据就可实现训练。
首先,把自己的数据集构造成cifar10格式。
第一步,构建train、val的lst
'''
creat_list.py
'''
import os
import shutil
import random
woodtrain = open('data/wood_train.lst', 'w')
woodtest = open('data/wood_test.lst', 'w')
savedir = 'data/floor'
dirpath = 'F:/2019_DL_Nets/SENet-Tensorflow/dataset'
filelist = []
for parent, dirs, filenames in os.walk(dirpath):
for subdir in dirs:
labels = dirs.index(subdir)
subfilelist = []
for filename in os.listdir(os.path.join(parent, subdir)):
objfile = os.path.join(parent, subdir, filename)
desfile = os.path.join(savedir, str(labels) + "_" + filename)
shutil.copyfile(objfile, desfile)
subfilelist.append(str(labels) + "_"+ filename)
random.shuffle(subfilelist)
filelist.append(subfilelist)
ratio = 0.7
Tr_list = []
Te_list = []
for namelist in filelist:
train_num = int(ratio*len(namelist))
trainlist = namelist[0:train_num]
for info in trainlist:
Tr_list.append(info)
vallist = namelist[train_num:]
for info in vallist:
Te_list.append(info)
random.shuffle(Tr_list)
for inf in Tr_list:
woodtrain.write(inf + " " + inf[0][0] + "n")
random.shuffle(Te_list)
for inf in Te_list:
woodtest.write(inf + " " + inf[0][0] + "n")
woodtest.close()
woodtrain.close()
我的原始数据格式是



在每一类下都是按照顺序命名的,考虑到之后的train或者test数据里出现两种类别相同文件名的问题,这里用了shushutil.copyfile将源文件统一命名后拷贝到目标文件夹下,结果如下