_pickle.PicklingError: Can‘t pickle <class ‘__main__.MLPmodel‘>: attribute lookup MLPmodel on __main

报错信息:_pickle.PicklingError: Can't pickle <class '__main__.MLPmodel'>: attribute lookup MLPmodel on __main__ failed

解决方法:

报错信息的意思是在main里面找不到MLPmodel(文末附源代码)

因为我是在同一个文件A里定义的网络结构(class MLPmodel),在后面的if __name__ == "__main__"里面使用,故出现上述报错。

将class MLPmodel部分代码剪切粘贴到一个单独的文件B中,在A中import即可解决问题。

下面放出代码:原代码及更改后的代码

原代码:create_net.py

更改后的代码:MLPmodel.py、MLPmodel2.py、create_net_test.py

create_net.py

'''搭建网络:用Module和Sequential两种不同的网络定义方式'''
import torch
import torch.nn as nn  # nn模块方便用户对网络中的层的使用
from torch.optim import SGD
import torch.utils.data as Data  # Data模块用于对使用数据的预处理
from sklearn.datasets import load_boston  # 用于导入数据
from sklearn.preprocessing import StandardScaler  # 对数据进行标准化
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


# 使用继承Module的方式定义一个包含层的全连接神经网络
class MLPmodel(nn.Module):
    def __init__(self):
        super(MLPmodel, self).__init__()
        # 定义第一个隐藏层
        self.hidden1 = nn.Linear(
            in_features=13,  # 第一个隐藏层的输入,数据的特征数
            out_features=10,  # 第一个隐藏层的输出,神经元的数量
            bias=True,  # 默认会有偏置
        )
        self.active1 = nn.ReLU()
        # 定义第二个隐层
        self.hidden2 = nn.Linear(10, 10)
        self.active2 = nn.ReLU()
        # 定义预测回归层
        self.regression = nn.Linear(10, 1)

    # 定义网络的前向传播路径
    def forward(self, x):
        x = self.hidden1(x)
        x = self.active1(x)
        x = self.hidden2(x)
        x = self.active2(x)
        output = self.regression(x)
        # 输出为output
        return output


# 使用定义网络时使用nn.Sequential的形式
class MLPmodel2(nn.Module):
    def __init__(self):
        super(MLPmodel2, self).__init__()
        # 定义隐藏层
        # nn.Sequential()可以简化定义网络的结构和前向传播函数
        self.hidden = nn.Sequential(
            nn.Linear(13, 10),
            nn.ReLU()
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值