总是遇到奇怪问题一

Posted 2020zxc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了总是遇到奇怪问题一相关的知识,希望对你有一定的参考价值。

遇到报错:ValueError: optimizer got an empty parameter list

在pycharm上也是报相同的错误

技术图片

 

完整代码:

技术图片
 1 import torch
 2 import torch.nn as nn
 3 from torch.optim import SGD
 4 import torch.utils.data as Data
 5 from sklearn.datasets import load_boston
 6 from sklearn.preprocessing import StandardScaler
 7 import pandas as pd
 8 import numpy as np
 9 import matplotlib.pyplot as plt
10 ##读取数据
11 boston_X,boston_y= load_boston(return_X_y=True)
12 print("boston_X.shape:",boston_X.shape)
13 plt.figure()
14 plt.hist(boston_y,bins=20)
15 plt.show()
16 ##数据标准化处理
17 ss = StandardScaler(with_mean=True,with_std=True)
18 boston_Xs= ss.fit_transform(boston_X)
19 ##将数据预处理为可以使用pytorch进行批量训练的形式
20 ##训练X转化为张量
21 train_xt= torch.from_numpy(boston_Xs.astype(np.float32))
22 ##训练集y转化为张量
23 train_yt = torch.from_numpy(boston_y.astype(np.float32))
24 ##将训练集转化为张量后,使用TensorDataset将X和Y整理到一起
25 train_data = Data.TensorDataset(train_xt,train_yt)
26 ##定义一个数据加载器,将训练数据集进行批量处理
27 train_loader = Data.DataLoader(
28     dataset = train_data,   ##使用的数据集
29     batch_size = 128,       ##批量处理样本的大小
30     shuffle = True,         ##每次迭代前打乱数据
31     num_workers = 1,        ##使用两个进程
32 )
33 ##使用继承Module的方式定义全连接神经网络
34 class MLPmodel(nn.Module):
35     def _init_(self):
36         super(MLPmodel,self)._init_()
37         ##定义第一个隐藏层
38         self.hidden1 = nn.Linear(
39             in_features = 13,   ##第一个隐藏层的输入,数据的特征数
40             out_feature = 10,   ##第一个隐藏层的输出,神经元的数量
41             bias = True,
42         )
43         self.activel = nn.ReLU()
44         ##定义第二个隐藏层
45         self.hidden2 = nn.Linear(10,10)
46         self.active2 = nn.ReLU()
47         ##定义预测回归层
48         self.regression = nn.Linear(10,1)
49     ##定义网络的前向传播路径
50     def forward(self, x):
51         x=self.hidden1(x)
52         x=self.active1(x)
53         x=self.hidden2(x)
54         x=self.active2(x)
55         output=self.regression(x)
56         ##输出为output
57         return output
58 ##输出网络结构
59 mlp1 = MLPmodel()
60 print(mlp1)
61 ##对回归模型mlp1进行训练并输出损失函数的变化情况,定义优化器和损失函数
62 optimizer = SGD(mlp1.parameters(),lr=0.001)
63 loss_func = nn.MSELoss()    ##最小均方根误差
64 train_loss_all = [ ]         ##输出每个批次训练的损失函数
65 ##进行训练,并输出每次迭代的损失函数
66 for epoch in range(30):
67     ##对训练数据的加载器进行迭代计算
68     for step,(b_x,b_y) in enumerate(train_loader):
69         output = mlp1(b_x).flatten()     ##MLP在训练batch上的输出
70         train_loss = loss_func(output,b_y)  ##均方根误差
71         optimizer.zero_grad()             ##每个迭代步的梯度初始化为0
72         train_loss.backward()             ##损失的向后传播,计算梯度
73         optimizer.step()                  ##使用梯度进行优化
74         train_loss_all.append(train_loss.item())
75 plt.figure()
76 plt.plot(train_loss_all,"r-")
77 plt.title("Train loss per iteration")
78 plt.show()
View Code

 

以上是关于总是遇到奇怪问题一的主要内容,如果未能解决你的问题,请参考以下文章

Android片段底部的奇怪空白?

更改片段(子片段)时 RecyclerView 中的奇怪叠加

片段内的LinearLayout总是在顶部留下空白

译丨Yarn - Javascript 新一代套件管理

Jetpack Navigation Drawer 总是重新创建片段

切换到特定片段会产生奇怪的 java.lang.NullPointerException