IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Pytorch使用笔记 -> 正文阅读

[人工智能]Pytorch使用笔记

创建网络层,先定义一个类,继承 nn,Module基类,? 定义一个构造函数并且调用父类的构造函数, 父类构造函数的第一个默认参数是子类名称,第二个默认参数是self

之后在子类构造函数中定义自己的网络层即可, 需要几层,就写几层,如 Rule啊,Dropout都写在构造函数中。

需要重写forward(self,x)函数,x表示训练数据x,??? 在前向传播函数中,调用网络层进行前向传播,? 如果需要迭代多次,记得每次清空梯度值。

import torch.nn as nn       //导入网络层

class LinerNet(nn.Module):
    def __init__(self,n_feature):
        super(LinerNet,self).__init__()
        self.linear = nn.Linear(n_feature,1)

    def forward(self,x):
        y = self.linear(x)
        return y

num_imputs = 2
net = LinerNet(num_imputs)

print(net)

使用nn.Sequential()搭建网络。

Sequential 是一个有序的容器,网络层按照在传入Sequential的顺序依次添加到计算图中

写法一:

net = nn.Sequential(

??????? nn.Linear(num_inputs, 1)???

????????#此处还可以传入其他层

)

?方法二:

net = nn.Sequential()

net.add_module('linear', nn.Linear(num_inputs, 1))

#net.add_module........添加其他层

?方法三:

from collections import OrderedDict

net = nn.Sequential(OrderedDict([

??????? ('linear', nn.Linear(num_inputs,1))

????????#添加其他层......

]))

print(net)可以得到网络结构

查看每一层网络参数值:

for param in net.parameters():

??????? print(param)

?模型初始化方法;

我们通过init.normal_方法把权重初始化为均值为0,标准差为0.01的正态分布。

偏差初始化为0

from torch.nn import init

init.normal_(new[0].weiight , mean=0, std=0.01)

init.constant_(net[0].bias ,? val =0)

定义损失函数 :

Pytorch在nn中提供了各种损失函数,这些损失函数可以看作是一种特殊的层,Pytorch也将这些损失函数实现为nn.Module的子类, 下面使用它提供的均方误差损失作为模型损失函数。

loss = nn.MSELoss()

定义优化函数:

torch.optim模块提供了很多常用的优化算法, SGD, Adam等, 下面创建一个用于优化net所有参数的优化器,并指定学习率为0.03的小批量梯度下降

import torch.optim as optim

optimizer = optim.SGD(net.parameters(), lr=0.03)

print(optimizer)

我们可以为不同子网络设置不同的学习率

optimizer = optim.SGD([

??????? #如果对某个参数不指定学习率,就使用最外层默认的学习率

??????? {'params' : net.subnet1.parameters()},? #lr=0.03,是外层默认的

??????? {'params' : net.subnet2.parameters(), 'lr' = 0.01}

],? lr=0.03)? //这里的lr=0.03是外层的 lr

训练模型:

num_epoch = 3

for epoch in range(1, num_epochs+1):

??????? for X, y in data_iter:

??????????????? output = net(X)

??????????????? l = loss(output, y.view(-1,1))

??????????????? optimizer.zero_grad()

??????????????? l.backward()

??????????????? optimizer.step()

??????? print("epoch %d,? loss: %f"? %(epoch,l.item()))

我们可以分别比较学习到的模型参数和真实的模型参数。 我们从net获得需要的层,并访问其weight 和偏差bias。

dense = net[0]

print(true_w, dense.weight)??? true_w和true_b是在训练之前初始化的参数

print(true_b, dense.bias)

总结:

torch.utils.data模块提供了有关数据处理的工具

torch.nn模块定义了大量神经网络层

torch.nn.init模块定义了各种初始化方法

torch.optim模块提供了模型参数初始化的各种方法

model = NeuralNetwork().to(device)
print(model

进行预测:
X = torch.rand(1, 28, 28, device=device)
logits = model(X)
pred_probab = nn.Softmax(dim=1)(logits)
y_pred = pred_probab.argmax(1)
print(f"Predicted class: {y_pred}")

import torch
import torchvision.models as models
torch.save(model, 'model.pth')
model = torch.load('model.pth')
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-05 12:02:52  更:2021-12-05 12:03:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 3:45:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码