神经网络训练日志
今日正在编写的样本生成工具处理数据非常慢,并且随着处理的进度增加,越来越慢,通常要几个小时,检查原因居然是numpy框架的concatenate函数效率低下,说白了这是个小白问题,它在不断重新扩大数组的大小,所有数据都要重新编排数组下标。
first_array = np.concatenate((first_array, features_of_row),
axis=0) # 这里有巨大的性能隐忧,尤其是在循环里面
因此,俺就放弃了这个函数,自己写了一个函数,通过一个临时文件,将数据追加到文件里面。然后再读取出来
array_str_line = ';'.join("{:10.15f}".format(x[0]) for x in features_of_row)
array_str_line = array_str_line + "\r\n"
csv_file.write(array_str_line)
这方法果然有效,性能提升了10倍都不止,以前一天的工作,现在要2个小时就生成了100万的训练数据。于是赶紧将其拉到GPU中训练,谁料预测准确率下降了10%,百思不得其解。
在无聊的训练过程中,盯屏幕发呆的时候,无意中发现,之前的损失函数突发变的无比大的问题不见了,曲线上就是波动较大的波峰不见了。这是为什么呢?经过托着下巴一个小时的思考,灵机一动,得到了答案:肯定是训练数据有了巨大的变化,立刻检查刚才自己写的函数处理的临时文本中的数据,才发现,在文本和numpy array的来回倒腾的时候,一些数据精度丢失了,再拿这种损失精度的数据取训练,导致降低了准确率。