Pytorch 深度学习运行代码简单教程

Pytorch 是一个机器深度学习框架,易于上手,个人感觉比 tensorflow要友好。
Pytorch的深度学习程序分三个模块,实现三个功能,分别是取数据、建模型、运行程序。一般是分三个.py文件写,当然也可以写在一个文件里。我喜欢写成三个文件,这样看着比较方便点,而且Pytorch把这三个功能都写的挺好的,自己用的时候继承稍微改一下就好了。

其实深度学习的最终目标,就像求 y = f ( x ) y = f(x) y=f(x) 这个公式中 f ( x ) f(x) f(x) 的最佳参数一样:

  1. 首先我们会有很多很多的 ( x , y ) (x, y) (x,y),它们都是一一对应的 (尽量不要出现一个 x x x对应多个 y y y,这样会让 f ( x ) f(x) f(x) 捉摸不透的),那么我们第一个文件就是如何把 ( x , y ) (x, y) (x,y) 弄成一对一对的,送入到 f ( x ) f(x) f(x) 里。
  2. ( x , y ) (x, y) (x,y) 解决了,接下来就是定义 f ( x ) f(x) f(x) 的形式了,具体是怎么表达的,比如 f ( x ) = 2 x f(x)=2x f(x)=2x …, 所以就需要另一个文件来定义 f ( x ) f(x) f(x) 了,就是所谓的模型了。
  3. 现在我们手头上有了成对的 ( x , y ) (x, y) (x,y) 了,也有了确定结构的 f ( x ) f(x) f(x) 。最后就是让两者联系起来,把 ( x , y ) (x, y) (x,y) 送入到 f ( x ) f(x) f(x)里,接着得到结果,求 目标 y y y预测 y y y 之间的差距,一般就是平方差之类的,然后拿着这个差值去进行更新 f ( x ) f(x) f(x) 里的参数,也就是后向传播。

1、数据处理

继承Dataset就可以了,直接上代码

from torch.utils.data import Dataset

class DataSet_h(Dataset):
    def __init__(self):
        super(DataSet_h, self).__init__()
        # 这里的数组就是我们取实际的数据了
        self.Arr = [(x1, y1), (x2, y2)...]

    def __len__(self):
     	# 数组的长度
        return len(self.Arr)

    def __getitem__(self, item):
    	# 取数据的时候要按着自己定义模型需要来,一般都会有x, y
        x = self.Arr[item][0]
        y = self.Arr[item][1]
        return x, y

2、模型搭建

继承nn.Module就可以了,直接上代码

import torch.nn as nn

class Model_h(nn.Module):
    def __init__(self):
        super(Model_h, self).__init__()
        self.fc = nn.Linear(10, 5)

    def forward(self, inputs):
    	return self.fc(inputs)

3、训练文件

直接上代码

from torch.utils.data import DataLoader
from Model import Model_h  # 引入定义模型
import DataSet_h  # 引入数据处理
# 定义我们的模型
model = Model_h()
# 定义我们优化器,就理解成用来更新模型参数的
optimizer = torch.optim.Adam(model.parameters(), lr=0.0001)
# 将数据装载如Pytorch定义好的数据驱动器中
trainDataSet = DataSet_h.DataSet_h()
trainDataLoader = DataLoader(trainDataSet, batch_size=2)
for i, batch in enumerate(trainDataLoader):
	x, y = batch
	y_pre = model(x)
	# 当然Pytorch一般会给我们提供很多很好的损失函数,这里就用➖来说明意思
	loss = y_pre - y  
	# 然后就是经典三步走了,清空、反传、更新。
	optimizer.zero_grad()
	loss.backward()
	optimizer.step()

最基本的意思就是这样,我还没试代码能不能跑,不过想法通了,代码的小问题都不是事儿了。

posted @ 2021-10-09 15:46  赫凯  阅读(385)  评论(0)    收藏  举报