总是遇到奇怪问题一
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()
以上是关于总是遇到奇怪问题一的主要内容,如果未能解决你的问题,请参考以下文章
更改片段(子片段)时 RecyclerView 中的奇怪叠加