浅析PyTorch中nn.Linear的使用

浅析PyTorch中nn.Linear的使用

介绍

在深度学习中,神经网络是一个重要的概念,神经网络模型通常由多个线性和非线性层构成。然而,在神经网络中,参数调节是一个关键问题。为了解决这个问题,使用反向传播算法来计算误差并调整网络参数是一种常见的方法。

PyTorch是一种基于Torch的开源机器学习库,它具有动态图的优势,可以方便地定义和训练神经网络模型。其中的nn.Linear是一个常用的线性层,本文将介绍如何使用它。

使用nn.Linear

PyTorch中的nn.Linear实现了一个全连接层,即线性变换层。它将输入特征的维度转换为输出特征的维度,并接受自己的权重和偏置向量。具体而言,如果输入具有形状(batch_size, input_size),则输出具有形状(batch_size, output_size)

使用nn.Linear只需要指定输入特征的大小和输出特征的大小即可。例如,下面是一个输入大小为10,输出大小为5的nn.Linear模块:

import torch
import torch.nn as nn

linear = nn.Linear(10, 5)

在从nn.Linear中获取输出时,我们可以将输入数据传递给它,然后它将计算输出,其中包括权重和偏置参数:

input = torch.randn(32, 10)
output = linear(input)

例如,这是一个使用nn.Linear的简单示例:

import torch
import torch.nn as nn

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

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

model = Model()
input = torch.randn(32, 10)
output = model(input)
print(output.shape) # torch.Size([32, 5])

示例1:使用nn.Linear建立简单线性回归模型

以下是使用nn.Linear建立简单线性回归模型的示例:

import torch
import torch.nn as nn
import matplotlib.pyplot as plt

# 首先,创建一些测试数据。
x = torch.linspace(0, 10, 100)
y = x ** 2

# 确定模型和损失函数。
model = nn.Linear(1, 1)
criterion = nn.MSELoss()

# 确定优化器,这里使用随机梯度下降(SGD)。
optimizer = torch.optim.SGD(model.parameters(), lr=0.001)

# 开始训练,迭代10000次。
for i in range(10000):
    # 首先将x和y转换为模型需要的shape。
    x_ts = x.view(-1, 1)
    y_ts = y.view(-1, 1)

    # 将数据传递给模型并计算损失。
    y_pred = model(x_ts)
    loss = criterion(y_pred, y_ts)

    # 清除优化器的梯度然后反向传播并优化模型参数。
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

# 将结果可视化。
with torch.no_grad():
    y_pred = model(x.view(-1, 1)).numpy()

plt.plot(x.numpy(), y.numpy(), 'ro', label='Original data')
plt.plot(x.numpy(), y_pred, 'b-', label='Fitted line')
plt.legend()
plt.show()

上面的代码创建了一个简单的线性模型,该模型将x作为输入,将x^2作为输出。在模型训练之后,将结果可视化以显示模型拟合的数据。

示例2:使用nn.Linear建立简单分类模型

以下是使用nn.Linear建立简单二分类模型的示例:

import torch
import torch.nn as nn

# 创建一些测试数据。
X = torch.tensor([
    [0, 0],
    [0, 1],
    [1, 0],
    [1, 1]
], dtype=torch.float)

y = torch.tensor([
    [0],
    [1],
    [1],
    [0]
], dtype=torch.float)

# 创建模型和损失函数。
model = nn.Sequential(
    nn.Linear(2, 2),
    nn.Sigmoid(),
    nn.Linear(2, 1),
    nn.Sigmoid()
)
criterion = nn.BCELoss()

# 创建优化器,这里使用随机梯度下降(SGD)。
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)

# 开始训练,迭代10000次。
for i in range(10000):
    # 将数据传递给模型并计算损失。
    y_pred = model(X)
    loss = criterion(y_pred, y)

    # 清除优化器的梯度然后反向传播并优化模型参数。
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

# 测试模型。
with torch.no_grad():
    y_test = model(X)

print(y_test.round())

在此示例中,我们创建了一个简单的二分类模型,将两个输入值作为输入,并输出一个值。在激活函数Sigmoid后,我们输出一个具有sigmoid激活的单个神经元。该模型经过训练可以对输入进行二分类,在最后输出处使用round()函数将输出四舍五入为0或1。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析PyTorch中nn.Linear的使用 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • TensorFlow2.X结合OpenCV 实现手势识别功能

    下面我将详细讲解“TensorFlow2.X结合OpenCV 实现手势识别功能”的完整攻略,包括两条示例说明。 简介 手势识别是计算机视觉中的一项重要技术,能够实现通过手势控制计算机进行操作的功能。本文将介绍如何使用TensorFlow2.X结合OpenCV实现手势识别功能。 示例1:使用OpenCV进行手势检测 步骤如下: 读取视频流和模型数据 “`py…

    卷积神经网络 2023年5月15日
    00
  • TensorFlow卷积神经网络实现手写数字识别以及可视化

    边学习边笔记 https://www.cnblogs.com/felixwang2/p/9190602.html 1 # https://www.cnblogs.com/felixwang2/p/9190602.html 2 # TensorFlow(十):卷积神经网络实现手写数字识别以及可视化 3 4 import tensorflow as tf 5 f…

    卷积神经网络 2023年4月6日
    00
  • tensorflow-参数、超参数、卷积核权值共享

    根据网上查询到的说法,参数就是在卷积神经网络中可以被训练的参数,比如卷积核的权值和偏移等等,而超参数是一些预先设定好并且无法改变的,比如说是卷积核的个数等。 另外还有一个最最基础的概念,就是卷积核的权值共享,这个共享其实指的是一个卷积核在一个输入中的不同位置是共享参数的(意思就是一个输入使用同一个卷积核的参数)。

    卷积神经网络 2023年4月5日
    00
  • 跟我学算法- tensorflow 卷积神经网络训练验证码

    使用captcha.image.Image 生成随机验证码,随机生成的验证码为0到9的数字,验证码有4位数字组成,这是一个自己生成验证码,自己不断训练的模型 使用三层卷积层,三层池化层,二层全连接层来进行组合 第一步:定义生成随机验证码图片 number = [‘0′,’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9’] # alphab…

    卷积神经网络 2023年4月8日
    00
  • 讯飞智能录音笔SR301青春版好不好用?请看深度测评,答案都在这里

    讯飞智能录音笔SR301青春版测评 简介 讯飞智能录音笔SR301青春版是一款集录音、笔记、翻译等多种功能于一身的智能化录音笔,外观精致,操作简单,而且价格也非常亲民。 外观设计 讯飞智能录音笔SR301青春版采用金属+塑料材质,机身上的“讯飞”标志为其增色不少。该款录音笔既有可爱的小巧外形,又兼备大气稳重的精致。简单的按键布局,灵敏的操作手感,全新的UI界…

    卷积神经网络 2023年5月15日
    00
  • 深度学习面试题25:分离卷积(separable卷积)

      举例   单个张量与多个卷积核的分离卷积   参考资料   举例 分离卷积就是先在深度上分别卷积,然后再进行卷积,对应代码为: import tensorflow as tf # [batch, in_height, in_width, in_channels] input =tf.reshape(tf.constant([2,5,3,3,8,2,6,1…

    2023年4月7日
    00
  • GCN 图神经网络使用详解 可视化 Pytorch

    下面是关于GCN图神经网络使用详解及其可视化的攻略,包含两个示例说明。 示例1:定义GCN图神经网络类 以下是一个定义GCN图神经网络类的示例: import torch import torch.nn as nn import torch.nn.functional as F from torch_geometric.nn import GCNConv c…

    卷积神经网络 2023年5月16日
    00
  • 图像处理之基础—卷积及其快速算法的C++实现

    头文件:   /* * Copyright (c) 2008-2011 Zhang Ming (M. Zhang), zmjerry@163.com * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU …

    卷积神经网络 2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部