利用torch.nn实现前馈神经网络解决 回归 任务
2022-03-07 19:25
891 查看
1 导入实验需要的包
import torch from torch import nn import numpy as np import matplotlib.pyplot as plt from torch.utils.data import DataLoader,TensorDataset from sklearn.model_selection import train_test_split from collections import OrderedDict from torch.nn import init
2 初始化数据
num_input ,num_example = 500,10000 true_w = torch.ones(1,num_input)*0.0056 true_b = 0.028 x_data = torch.tensor(np.random.normal(0,0.001,size = (num_example,num_input)),dtype = torch.float32) y = torch.mm(x_data,true_w.t()) +true_b y += torch.normal(0,0.001,y.shape) train_x,test_x,train_y,test_y = train_test_split(x_data,y,shuffle= True,test_size=0.3)
3 加载数据
batch_size = 50 train_dataset = TensorDataset(train_x,train_y) train_iter = DataLoader( dataset = train_dataset, batch_size = batch_size, shuffle = True, num_workers = 0, ) test_dataset = TensorDataset(test_x,test_y) test_iter = DataLoader( dataset = test_dataset, batch_size = batch_size, shuffle = True, num_workers = 0, )
4 定义模型
model= nn.Sequential(OrderedDict([ ('linear1',nn.Linear(num_input,256)), ('linear2',nn.Linear(256,128)), ('linear3',nn.Linear(128,1)), ]) ) for param in model.parameters(): init.normal_(param,mean = 0 ,std = 0.001)
# for param in model.state_dict(): # print(param) # print(model.state_dict()[param])
5 参数初始化
lr = 0.001 loss = nn.MSELoss() optimizer = torch.optim.SGD(model.parameters(),lr)
6 定义训练函数
def train(model,train_iter,test_iter,loss,num_epochs,batch_size,lr): train_ls,test_ls = [],[] for epoch in range(num_epochs): train_ls_sum ,test_ls_sum = 0,0 for x,y in train_iter: y_pred = model(x) l = loss(y_pred,y) optimizer.zero_grad() l.backward() optimizer.step() train_ls_sum += l.item() for x ,y in test_iter: y_pred = model(x) l = loss(y_pred,y) test_ls_sum +=l.item() train_ls.append(train_ls_sum) test_ls.append(test_ls_sum) print('epoch %d,train_loss %.6f,test_loss %f'%(epoch+1, train_ls[epoch],test_ls[epoch])) return train_ls,test_ls
7 训练
num_epochs = 200 train_loss ,test_loss = train(model,train_iter,test_iter,loss,num_epochs,batch_size,lr)
8 可视化
x = np.linspace(0,len(train_loss),len(train_loss)) plt.plot(x,train_loss,label="train_loss",linewidth=1.5) plt.plot(x,test_loss,label="test_loss",linewidth=1.5) plt.xlabel("epoch") plt.ylabel("loss") plt.legend() plt.show()
相关文章推荐
- 利用 torch.nn 实现前馈神经网络解决 多分类 任务
- 利用torch.nn实现前馈神经网络解决 多分类 任务使用至少三种不同的激活函数
- 利用torch.nn实现前馈神经网络解决 二分类 任务
- TF之NN之回归预测:利用NN算法(RelU)实现根据三个自变量预测一个因变量的回归问题
- asp.net利用Global.asax来实现定点执行任务的简易解决办法
- 事件驱动自动生成静态页面模板解决方法(一)——利用静态类和FileSystemWatcher实现模板快速索引和读取
- java web 利用 commons-fileupload-1.2 实现文件上传 解决 中文乱码& 非文件属性的读取
- linux下利用shell脚本实现添加crontab任务
- Oracle利用job实现定时执行任务
- 第16周报告2(任务3)学会利用指针解决问题
- 利用ServletContextListener实现定时任务
- 利用onMeasure测量来实现图片拉伸永不变形,解决屏幕适配问题
- 利用线程消息队列,实现任务队列
- 利用Cache,asp.net 简单实现定时执行任务
- RW 5 将任务四的的解决用一个项目多个文件夹的方式实现
- 利用采样器实现mapreduce任务输出全排序
- 利用定时任务实现嵌入式下网卡状态检测
- 要求顺序循环队不损失一个空间,全部能够得到有效利用,试采用设置标志位tag的方法解决“假溢出”问题,实现顺序循环队列算法
- Android自定义控件系列八:详解onMeasure()(二)--利用onMeasure测量来实现图片拉伸永不变形,解决屏幕适配问题
- ant 的ftp任务使用,实现自动备份等,解决中文问题