1. JSON读取大量数据错误:JSONDecodeError: Extra data: line 2 column 1或者ValueError: Extra data
- 可以逐行读取,然后再处理成列表
import json
# 由于文件中有多行,直接读取会出现错误,因此一行一行读取
file = open("papers.json", 'r', encoding='utf-8')
papers = []
for line in file.readlines():
dic = json.loads(line)
papers.append(dic)
print(len(papers))
2. ‘gbk’ codec can’t decode byte 0xbf in position 2: illegal multibyte sequence
- 在打开文本时候,可以指明打开方式:
file = open(path, encoding='gbk')
3. 连接mysql数据库报错__init__() takes 1 positional argument but 5 were given
- 把连接语句修改成如下
db=pymysql.connect(host=dbhost,user=dbuser,password=dbpass,database=dbname)
4. PyTorch错误:The “freeze_support()” line can be omitted if the program is not going to be frozen to produce an executable.
- 将你要运行的代码块放到main函数中运行即可
if __name__ == '__main__':
# your code
5. PytorchWarning: Leaking Caffe2 thread-pool after fork
解决办法:设置pin_memory=False
pin_memory解释
pin_memory就是锁页内存,创建DataLoader时,设置pin_memory=True,则意味着生成的Tensor数据最开始是属于内存中的锁页内存,这样将内存的Tensor转到GPU的显存就会更快一些。
主机中的内存,有两种存在方式,一是锁页,二是不锁页,锁页内存存放的内容在任何情况下都不会与主机的虚拟内存进行交换(注:虚拟内存就是硬盘),而不锁页内存在主机内存不足时,数据会存放在虚拟内存中。而显卡中的显存全部是锁页内存!
当计算机的内存充足的时候,可以设置pin_memory=True。当系统卡住,或者交换内存使用过多的时候,设pin_memory=False。因为pin_memory与电脑硬件性能有关,pytorch开发者不能确保每一个炼丹玩家都有高端设备,因此pin_memory默认为False。
原文链接:pytorch pin_memory