问题及解决
问题:明明已经设置“batch_size = 16”,训练数据量在300-400条,
但在运行代码,实际训练时,仍全批量训练,未分批次:
Epoch 1/500
1/1 ……
解决:检查所用数据,是否按照代码中定义的那样( for c in l.split('\n'): #######################查找换行符),以换行符分隔每条数据。
def load_data(filename): #加载标注数据:训练集、测试集与验证集
D = []
with open(filename, encoding='utf-8') as f: #打开并读取文件内容
f = f.read() #读取文件全部内容
for l in f.split('\n\n'): #查找双换行符
if not l: #若无双换行符
continue #跳出本次循环,可执行下一次 (而break是跳出整个循环)
d, last_flag = [], ''
for c in l.split('\n'): #######################查找换行符
char, this_flag = c.split(' ')
if this_flag == 'O' and last_flag == 'O':
d[-1][0] += char #d[-1][0]=d[-1][0]+char
elif this_flag == 'O' and last_flag != 'O':
d.append([char, 'O'])
elif this_flag[:1] == 'B':
d.append([char, this_flag[2:]])
else:
d[-1][0] += char
last_flag = this_flag
D.append(d)
return D
所用数据是用换行符+空格分隔数据,将空格去除即可。
浅析Batchsize
Batchsize设置为1,即随机梯度下降(stochastic Gradient Descent,SGD)。
Batchsize设置为训练数据量,即全批量训练。
一般将Batchsize设置为16,32,64……至于Batchsize设置大值/小值更好,众说纷纭。