Torch是一个开放源代码的机器学习库,它广泛用于计算机视觉和自然语言处理等领域的研究和开发
优点
-
动态图:与TensorFlow等静态图框架不同,PyTorch使用动态图,这意味着计算图是在运行时构建的,这使得调试和原型设计变得更加容易。
-
易用性:PyTorch提供了直观的API,使得构建和训练神经网络变得更加简单和直观。它支持Python编程语言,这对于许多数据科学家和机器学习研究人员来说是非常方便的。
-
强大的生态系统:PyTorch拥有一个活跃的社区和丰富的生态系统,包括许多预训练的模型、工具和数据集,这有助于加速研究和开发过程。
-
分布式训练:PyTorch支持分布式训练,使得在多个GPU或机器上并行训练大型模型成为可能,从而加快了训练速度。
-
自动微分:PyTorch内置了自动微分系统,可以自动计算神经网络中所有参数的梯度,从而简化了梯度下降等优化算法的实现。
PyTorch被广泛应用于学术研究和工业界,特别是在计算机视觉、自然语言处理、强化学习等领域。它已经成为深度学习领域中最受欢迎的框架之一。
卷积层是卷积神经网络的核心层而,卷积又是卷积层的核心
今天我们要利用torch这个库进行简单的深度学习中常见的二维卷积运算讲解以及代码的实现,开始慢慢接触深度学习的代码以及计算原理。
这次讲解的是深度学习卷积操作中最简单的对5 * 5的矩阵使用3 * 3的矩阵进行卷积操作,最后得到一个3矩阵。
通俗的讲就是一个5 * 5的格子为背景,3 * 3的格子为移动窗口在背景中不断移动计算,不能超出背景范围。
代码以及注释如下:
# 这是一个卷积运算的示例
# !/usr/bin/python
# -*- coding:utf8 -*-
import torch
def cust_conv2(X, K):
""" 实现卷积运算 """
# 获取卷积核的形状
h, w = K.shape # h代表K的高度(或行数)
# w代表K的宽度(或列数)
#print(K.shape)
# 初始化输出值 创建一个所有元素都为零的张量
Y = torch.zeros((X.shape[0] - h + 1, X.shape[1] - w + 1))
# 实现卷积运算
for i in range(Y.shape[0]):
for j in range(Y.shape[1]):
Y[i, j] = (X[i:i + h, j:j + w] * K).sum() # X[i:i + h, j:j + w] * K 符合
return Y
# 定义输入及卷积核
'''
1.0 1.0 1.0 0.0 0.0
0.0 1.0 1.0 1.0 0.0
0.0 0.0 1.0 1.0 1.1
0.0 0.0 1.0 1.0 0.0
0.0 1.0 1.0 0.0 0.0
'''
# X为5*5图像 创建一个二维张量,包含5行5列的数据
X = torch.tensor([[1.0, 1.0, 1.0, 0.0, 0.0],
[0.0, 1.0, 1.0, 1.0, 0.0],
[0.0, 0.0, 1.0, 1.0, 1.1],
[0.0, 0.0, 1.0, 1.0, 0.0],
[0.0, 1.0, 1.0, 0.0, 0.0]])
# K包含了3*3的卷积核
K = torch.tensor([[1.0, 0.0, 1.0],
[0.0, 1.0, 0.0],
[1.0, 0.0, 1.0]])
print(cust_conv2(X, K))
让我们来看看输出吧
大家可以改变输入以及卷积核的张量进行反复操作