python高级语法
待拆分类别:
- 类的使用
- 内存的使用
- 简易语法的使用
- 三元表达式在else处使用pass或者continue
报错:Syntax Error
https://cloud.tencent.com/developer/ask/187566
总之,
想写:x=A if condition==True else pass
不如:if condition==True: x=A
- 使用torch基于npy创建自己的数据集
报错:TypeError: object.__new__() takes exactly one argument (the type to instantiate)
原来代码是:
class Mydata(Data.Dataset):
def __init_(self,xpath,ypath):
self.x = np.load(xpath)
self.y = np.load(ypath)
应该改为:
class MyDataset(Dataset):
def __init__(self,xdata,ydata):
self.xdata = np.load(xdata)
self.ydata = np.load(ydata)
注意,传入的参数a应该使用self.a定义。
- dataloader载入数据集时报错:
TypeError: 'module' object is not callable
原来是:
import torch.utils.data as Data
train_loader = Data.dataloader(略)
改为:
from torch.utils.data import DataLoader, Dataset
train_loader = DataLoader(略)
错误同此link
- 数据类型错误
input type (torch.cuda.DoubleTensor) and weight type (torch.cuda.FloatTensor) should be the same
https://blog.csdn.net/weixin_38314865/article/details/103130389
目前:
def transform(x):
x = x.transpose(0,2,1)
return torch.from_numpy(x).type(torch.FloatTensor)
def target_transform(y):
return torch.from_numpy(y)[:,0].type(torch.int64)
x为FloatTensor,label为torch.int64。
- cuda out of memory
- 可能情况1:之前占用的内存空间没有释放。
解决:- 查看占用内存空间的进程号。
nvidia-smi
- 杀死进程。
kill 进程号
- 查看占用内存空间的进程号。
- 可能情况2: torch 版本和cuda版本不匹配
- 可能情况3: 变量太多爆炸了
- 解决方式1:释放不需要的变量(torch可以自己检测出哪些不需要,只需要加上以下语句即可。)
torch.cuda.empty_cache()
- 解决方式2:测试时爆炸了用网络测试时,依然在计算梯度。需要在不需要计算梯度的地方加上:
with torch.no_grad():
- 解决方式1:释放不需要的变量(torch可以自己检测出哪些不需要,只需要加上以下语句即可。)
- “non-default argument follows default argument”
报这个错是因为:把含有默认值的参数放在了不含默认值的参数的前面。
解决:调整位置即可。
link - 忽视warning
import warnings
warnings.filterwarnings("ignore")
- load big npy file, but crashed in colab after using all RAM. 【link】
try:
np.load('filename.npy',mmap_mode='c')
conclusion: load it with a mmap_mode='c' if you want to be able to modify data in memory but not on dis, or 'r+ if you want to modify data both in memory and on disk.
-
conda env create -f environment.yml
安装别人的环境时报错【ResolvePackageNotFound】
https://blog.csdn.net/langjijianghu_123/article/details/80923293
原因:conda里面没有存储这些库的下载地址。
解决方法:
将这些报错的库在environment.yml里注释掉。然后安装完环境后在环境里用pip下载。 -
from utils import utilities, file_analysis as fa, plotter
注意断句。
等同于:
from utils import utilities
from utils import file_analysis as fa
from utils import plotter