如何解决如何将文本文件中的所有行随机化而不必将它们保存到变量中?
在我的项目中,我创建了一个训练棋局位置的神经网络,我从database.lichess.org下载了7000万个游戏,并从每个游戏中提取了每一步的位置,并将获胜,失败和平局保存到了不同的文件。
我现在几乎可以开始训练我的神经网络了,但是如果现在开始训练,这些位置将被游戏聚集在一起-例如,前90个位置(每半步后进行45次移动游戏)将来自同一位置游戏。这意味着几乎整个训练迭代都将严重偏向特定游戏的结果。
显而易见的解决方案是将文本文件中的每一行随机化,但是我知道如何执行此操作的唯一方法如下:
import random as rand
def shuffle_lines(textfile_location):
textfile_lines_list = []
with open(textfile_location,"r") as textfile:
for line in textfile.readlines():
textfile_lines_list.append(line)
rand.shuffle(textfile_lines_list)
with open(textfile_location,"w") as textfile:
textfile.truncate()
for line in textfile_lines_list:
textfile.write(line)
利用我正在拖延的数据量(〜70'000'000场比赛* 70个半步= ='4'900'000'000个位置),我担心这会花费大量时间,因为我首先拥有将文本文件中的每一项都复制到列表中,然后随机播放列表,然后将列表复制回到文本文件中。
有没有更有效的方法来做到这一点,例如改组文本文件而不先复制到列表中?
解决方法
(编辑:更新了我的答案以反映@Maxijazz的评论)
这不是改组,而是一种更简单的方法(这里n
是当前文件中的行数):
使用numpy.random.permutation(n-1)
。这将返回一个包含整数[0,1 ...,n-1]的随机排列的数组。您可以简单地按顺序使用这些元素来创建“混洗”效果。
我想提出一种不同的方法:
在神经网络上,如果您在开始训练时有偏见,通常需要做两件事:
-
增加批次大小(减少批次中每个游戏的偏差)
-
降低或更改学习率(开始时体重变化较小)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。