PyTorch深度学习入门:张量基础与神经网络构建

PyTorch深度学习入门:张量基础与神经网络构建

deep-learning-v2-pytorch Projects and exercises for the latest Deep Learning ND program https://www.udacity.com/course/deep-learning-nanodegree--nd101 deep-learning-v2-pytorch 项目地址: https://gitcode.com/gh_mirrors/de/deep-learning-v2-pytorch

1. PyTorch简介与神经网络基础

PyTorch是一个基于Python的科学计算包,主要针对两类人群:

  • 替代NumPy以利用GPU的计算能力
  • 提供最大灵活性和速度的深度学习研究平台

神经网络的基本构建块是神经元,每个神经元接收多个输入,对它们进行加权求和,然后通过激活函数产生输出。数学表达式为:

$$ y = f\left(\sum_i w_i x_i +b \right) $$

其中:

  • $x_i$ 是输入特征
  • $w_i$ 是对应的权重
  • $b$ 是偏置项
  • $f$ 是非线性激活函数

2. PyTorch中的张量(Tensor)

张量是PyTorch中的核心数据结构,可以看作是Numpy数组的扩展:

  • 标量:0维张量
  • 向量:1维张量
  • 矩阵:2维张量
  • 更高维数组:n维张量

PyTorch张量支持GPU加速计算,这是它与Numpy数组的主要区别之一。

2.1 创建张量

import torch

# 创建随机张量
features = torch.randn((1, 5))  # 1行5列的正态分布随机数
weights = torch.randn_like(features)  # 与features相同形状的张量
bias = torch.randn((1, 1))  # 单个随机值

2.2 张量操作

PyTorch支持常见的数学运算,类似于Numpy:

# 元素级乘法
output = features * weights

# 求和
sum_result = torch.sum(output)  # 或 output.sum()

# 矩阵乘法
matrix_product = torch.mm(tensor1, tensor2)

3. 构建简单神经网络

3.1 单层网络实现

def activation(x):
    """ Sigmoid激活函数 """
    return 1/(1+torch.exp(-x))

# 计算网络输出
y = activation(torch.sum(features * weights) + bias)

3.2 使用矩阵乘法优化

更高效的方式是使用矩阵乘法:

# 调整权重张量形状以进行矩阵乘法
y = activation(torch.mm(features, weights.view(5, 1)) + bias)

注意矩阵乘法的形状要求:第一个矩阵的列数必须等于第二个矩阵的行数。

4. 多层神经网络

真实的神经网络通常由多个层组成:

  1. 输入层:接收原始数据
  2. 隐藏层:进行特征变换
  3. 输出层:产生最终预测

4.1 网络结构数学表示

对于两层网络:

隐藏层输出: $$ \vec{h} = f_1(\vec{x}W_1 + B_1) $$

最终输出: $$ y = f_2(\vec{h}W_2 + B_2) $$

4.2 PyTorch实现

# 定义网络参数
n_input = features.shape[1]  # 输入单元数
n_hidden = 2                 # 隐藏单元数
n_output = 1                 # 输出单元数

# 初始化权重和偏置
W1 = torch.randn(n_input, n_hidden)
W2 = torch.randn(n_hidden, n_output)
B1 = torch.randn((1, n_hidden))
B2 = torch.randn((1, n_output))

# 前向传播
h = activation(torch.mm(features, W1) + B1)
output = activation(torch.mm(h, W2) + B2)

5. PyTorch与Numpy互操作

PyTorch提供了与Numpy无缝转换的功能:

import numpy as np

# Numpy数组转PyTorch张量
a = np.random.rand(4, 3)
b = torch.from_numpy(a)

# PyTorch张量转Numpy数组
c = b.numpy()

注意:转换后的张量和数组共享内存,修改一个会影响另一个。

6. 总结

本文介绍了PyTorch中张量的基本概念和操作,以及如何使用PyTorch构建简单的神经网络。关键点包括:

  1. PyTorch张量是构建神经网络的基础数据结构
  2. 矩阵乘法是神经网络计算的核心操作
  3. 神经网络由多个层组成,每层进行线性变换后接非线性激活
  4. PyTorch与Numpy可以方便地相互转换

理解这些基础概念是掌握深度学习的关键第一步。在实际应用中,PyTorch提供了更高级的模块(如nn.Module)来简化网络构建过程,但底层原理仍然是基于这些基本操作。

deep-learning-v2-pytorch Projects and exercises for the latest Deep Learning ND program https://www.udacity.com/course/deep-learning-nanodegree--nd101 deep-learning-v2-pytorch 项目地址: https://gitcode.com/gh_mirrors/de/deep-learning-v2-pytorch

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

富茉钰Ida

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值