批训练错误之got an unexpected keyword...

提要

       最近我在学习莫烦的神经网络的批训练时,遇到了一个问题,就是在创建dataset时报__init__() got an unexpected keyword argument 'data_tensor',我找了很久都没有有效的结果。但是我偶然尝试了一下结果成功了,下面就列出调试过程

原始情况

原始代码

x = torch.linspace(1, 10, 10)       # x data (torch tensor)
y = torch.linspace(10, 1, 10)       # y data (torch tensor)

# 先转换成 torch 能识别的 Dataset
torch_dataset = Data.TensorDataset(data_tensor=x, target_tensor=y)

报错
报错

初步调试

       经过我的一番查找,网上有一种方法是说把data_tensor和target_tensor去掉,即

x = torch.linspace(1, 10, 10)       # x data (torch tensor)
y = torch.linspace(10, 1, 10)       # y data (torch tensor)

# 先转换成 torch 能识别的 Dataset
torch_dataset = Data.TensorDataset(x, y)

       但是这次报错更加夸张,见下图
报错

继续调试

       上图只是我截的报错中的一小部分,虽然报错很夸张,但是我们在浏览报错信息的过程中捕捉到了一句话就是
This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module:

if __name__ == '__main__':
    freeze_support()
    ...

       这段程序是开了双线程,而上面一段话告诉我们,没办法在当前进程结束以前再开一个新的线程。为什么呢?下面告诉我们说没加开始入口。也就是说我们要给程序加上开始入口。
       那么加上继续运行

if __name__ == '__main__':
    x = torch.linspace(1, 10, 10)
    y = torch.linspace(10, 1, 10)

    # 先转换成 torch 能识别的 Dataset
    torch_dataset = data.TensorDataset(x, y)

结果
结果

最后反思

       好的,我们成功运行出了结果。但是我们依然要回想这次的调试过程,看看问题真的只是出在没加入口上吗?那么,我们不妨再把代码改回去。

if __name__ == '__main__':
    x = torch.linspace(1, 10, 10)
    y = torch.linspace(10, 1, 10)

    # 先转换成 torch 能识别的 Dataset
    torch_dataset = data.TensorDataset(data_tensor=x, target_tensor=y)

       来,我们运行一下试试看
报错
       看,依然报这个错误,看来要解决这个问题,既要加上入口,又要去掉data_tensor和target_tensor。
       那么,还有最后一个问题:到底为什么会报__init__() got an unexpected keyword argument 'data_tensor',这也是我始终不明白的地方。如果有大佬路过,请留下您的见解。

如果各位看官觉得有帮助,请点个赞哦

猜你喜欢

转载自blog.csdn.net/ThunderF/article/details/94733747