浅析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日

相关文章

  • OpenCV基础(一)—图像卷积运算

    矩阵的掩模操作,通常也叫做卷积操作,原理非常简单,这里不再赘述。 下面通过OpenCV进行图像卷积操作(最后效果是:增强图像)。 基于掩模矩阵操作: 首先介绍下,用到的函数filter2D(). 函数功能:Convolves an image with the kernel. 函数原型: void filter2D( InputArray src, Outp…

    2023年4月6日
    00
  • 3. CNN卷积网络-反向更新

    1. CNN卷积网络-初识 2. CNN卷积网络-前向传播算法 3. CNN卷积网络-反向更新 如果读者详细的了解了DNN神经网络的反向更新,那对我们今天的学习会有很大的帮助。我们的CNN卷机网络中有3种网络结构。1. 卷积层,2.池化层,3.全连接层。全连接层的反向传播的方式和DNN的反向传播的方式是一样的,因为DNN的所有层都是全连接的结构。卷机层和池化…

    卷积神经网络 2023年4月7日
    00
  • python自己实现卷积操作

    代码: def easy_conv1(img, kernal, step = 1): N = img.shape[0] # 图片边长 F = kernal.shape[0] # filter长 L = int((N-F)/step) + 1 # 输出结果边长 res = torch.zeros(L, L, requires_grad = True) for …

    2023年4月6日
    00
  • 如何用Python 实现景区安防系统

    如何用Python实现景区安防系统 介绍 随着旅游业的发展,景区越来越受到人们的欢迎。同时,景区的安全问题也备受关注。为了保障游客的人身财产安全,景区管理部门需要建立一套完善的安防系统。本文将介绍如何用Python实现景区安防系统。 前置条件 在开始实现景区安防系统之前,我们需要准备以下硬件设备: 摄像头(可采用网络摄像头或USB摄像头) 树莓派(作为中心控…

    卷积神经网络 2023年5月15日
    00
  • 基于tensorflow的CNN卷积神经网络对Fasion-MNIST数据集的分类器(1)

    写一个基于tensorflow的cnn,分类fasion-MNIST数据集 这个就是fasion-mnist数据集 这张图片是CNN的一般结构     先上代码,在分析: import tensorflow as tf import pandas as pd import numpy as np config = tf.ConfigProto() confi…

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

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

    卷积神经网络 2023年5月15日
    00
  • 用numpy实现CNN卷积神经网络

    为了加深对卷积神经网络底层原理的理解,本文通过使用numpy来搭建一个基础的包含卷积层、池化层、全连接层和Softmax层的卷积神经网络,并选择relu作为我们的激活函数,选择多分类交叉熵损失函数,最后使用了mnist数据集进行了训练和测试。 关于卷积网络的详细原理和实现可参考下列文章: 刘建平Pinard:卷积网络前向反向传播算法 卷积层的反向传播 手把手…

    卷积神经网络 2023年4月8日
    00
  • 空洞卷积-膨胀卷积

    在图像分割领域,图像输入到CNN,FCN先像传统的CNN那样对图像做卷积再pooling,降低图像尺寸的同时增大感受野,但是由于图像分割预测是pixel-wise的输出,所以要将pooling后较小的图像尺寸upsampling到原始的图像尺寸进行预测,之前的pooling操作使得每个pixel预测都能看到较大感受野信息。因此图像分割FCN中有两个关键,一个…

    2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部