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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 深度学习实践与地统计学入门【一】 -> 正文阅读

[人工智能]深度学习实践与地统计学入门【一】

摘要

Anaconda因其集成了很多关于python科学计算的第三方库目前被广泛使用,本文在下载安装Anaconda并创建激活了Python3.7版本的PyTorch环境,安装了ipykernel后使用Jupyter对代码进行编译。代码来源于李沐《动手学深度学习》。

深度学习

环境搭建

实践环境:python3.7+PyTorch+Jupyter
将经常使用的类和函数等封装在d2l包中,d2l包是轻量级的,仅需要以下软件包和模块作为依赖

#@save
import collections
import hashlib
import math
import os
import random
import re
import shutil
import sys
import tarfile
import time
import zipfile
from collections import defaultdict
import pandas as pd
import requests
from IPython import display
from matplotlib import pyplot as plt

d2l = sys.modules[__name__]

对于要保存到d2l包中的任何代码块,如一个函数、一个类或者多个导入,都会标记为#@save

从PyTorch导入模块:

#@save
import numpy as np
import torch
import torchvision
from PIL import Image
from torch import nn
from torch.nn import functional as F
from torch.utils import data
from torchvision import transforms

如果想成功地应用深度学习,就必须学习如何抛出一个问题、建模的数学方法、将模型与数据拟合的算法、以及实现所有这些的工程技术。

预备知识

张量表示由一个数值组成的数组,这个数组可能有多个维度。具有一个维度的张量对应数学上的向量,具有两个维度的张量对应数学上的矩阵,具有两个轴以上的张量没有特殊的数学名称。在PyTorch这个深度学习框架中,它的张量类为Tensor,以后若无特殊说明,所说的张量均指的是张量类的实例。

Tensor张量类与科学计算包NumPy中的ndarray类似,比ndarray多两个重要功能:一,GPU加速矩阵运算,而NumPy仅支持CPU计算;二,Tensor张量类支持自动微分。

使用torch.arange(num)创建一个行向量,这个行向量包含从0开始的前num个整数,它们被默认创建为浮点数。张量中的每个值都称为张量的元素。

x = torch.arange(12)
print(x)

此张量x中有12个元素。
除非额外指定,否则新的张量将存储在内存中,并采用基于CPU的计算。

x.shape#通过张量的shape属性来访问张量的形状,即沿每个轴的长度
x.numel#检查张量中元素的总数,即形状的所有元素乘积
X = x.reshape(3,4)#改变一个张量的形状而不改变元素的数量和元素值,张量的大小不会改变

张量在给出其他部分后可自动计算出一个维度,调用时在希望张量自动推断的维度放置-1,因此x.reshape(-1,4), x.reshape(3,-1)和x.reshape(3,4)是等价的。

使用全0、全1、其他常量或者从特定分布中随机采样的数字来初始化矩阵:

torch.zeros((2,3,4))#所有元素设置为0
troch.ones((2,3,4))#所有元素设置为1

当我们构造数组来作为神经网络中的参数时,我们通常会随机初始化参数的值。以下代码创建的张量的每个元素都从均值为0、标准差为1的标准正态分布中随机采样。

torch.randn(3,4)

使用其他常量的情况,用到内置的列表类型对象[‘a’, 6, ‘c’, ‘d’],该对象可以包含不同类型的数据,也可以包含其他列表对象。通过提供包含数值的Python列表(或嵌套列表)来为所需张量中的每个元素赋予确定值。最外层的列表对应于轴0,内层的列表对应于轴1

torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])

运行结果如图1所示
1
对于任意具有相同形状的张量,都可以调用按元素运算,还可以执行线性代数运算,包括向量点积与矩阵乘法。
**运算符是求幂运算。
连结(concatenate):将多个张量端对端地叠起来形成一个更大的张量。我们只需要提供张量列表,并给出沿哪个轴连结。

X = torch.arange(12, dtype=torch.float32).reshape((3,4))
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1) #合并

运行结果如图2所示
2
还可以通过逻辑运算符构建二元张量。以X == Y为例,对于每个位置,如果X和Y在该位置相等,则新张量中相应项的值为1,否则该位置为0。

X == Y#X > Y

输出结果如图3所示
3
对张量中的所有元素求和会产生一个只有一个元素的张量。

X.sum()

广播机制(broadcasting mechanism):对形状不同的两个张量执行按元素操作。首先,通过适当复制元素来扩展一个或两个数组,以便在转换之后,两个张量具有相同的形状。其次,对生成的数组执行按元素操作。

#初始化两个张量
a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
a, b

运行结果如图4所示
4
沿着数组中长度为1的轴进行广播,将两个矩阵广播为一个更大的3×2矩阵,矩阵a沿轴1方向广播、将列复制,矩阵b沿轴0方向广播、将行复制,然后再按元素相加。

a + b

运行结果如图5所示
5

克里金插值

  1. 公式 z ^ 0 = ∑ i = 1 n λ i z i \hat z_0 =\displaystyle\sum_{i=1}^n \lambda_iz_i z^0?=i=1n?λi?zi? z ^ 0 \hat z_0 z^0?是点 ( x 0 , y 0 ) (x_0,y_0) (x0?,y0?)处的估计值,即 z ^ 0 = z ( x 0 , y 0 ) \hat z_0=z(x_0,y_0) z^0?=z(x0?,y0?),理解为待估计点周围散布采样点,通过公式计算待估计点的各项指标。
  2. λ i \lambda_i λi?是满足点 ( x 0 , y 0 ) (x_0,y_0) (x0?,y0?)处的估计值 z ^ 0 \hat z_0 z^0?与真实值 z 0 z_0 z0?的差最小的一套最优系数: min ? λ i V a r ( z ^ 0 ? z 0 ) \min\limits_{\lambda_i}Var(\hat z_0-z_0) λi?min?Var(z^0??z0?),同时满足无偏估计的条件 E ( z ^ 0 ? z 0 ) = E ( ∑ i = 1 n λ i z i ? z 0 ) = 0 E(\hat z_0-z_0)=E(\displaystyle\sum_{i=1}^n\lambda_iz_i-z_0)=0 E(z^0??z0?)=E(i=1n?λi?zi??z0?)=0,再根据假设条件推出 ∑ i = 1 n λ i = 1 \displaystyle\sum_{i=1}^n\lambda_i=1 i=1n?λi?=1
  3. 假设条件(不同的克里金插值方法的主要差异就是假设条件不同):空间属性z是均一的,对于任一点(x,y),都有同样的期望c与方差 σ 2 \sigma^2 σ2,即对任意(x,y)都有 E [ z ( x , y ) ] = E [ z ] = c , V a r [ z ( x , y ) ] = σ 2 E[z(x,y)]=E[z]=c, Var[z(x,y)]=\sigma^2 E[z(x,y)]=E[z]=c,Var[z(x,y)]=σ2。总结该假设条件:对于任意(x,y)、区域平均值为c、该点的随机偏差为R(x,y),有 z ( x , y ) = E [ z ( x , y ) ] + R ( x , y ) = c + R ( x , y ) z(x,y)=E[z(x,y)]+R(x,y)=c+R(x,y) z(x,y)=E[z(x,y)]+R(x,y)=c+R(x,y),其中偏差的方差均为常数 σ 2 \sigma^2 σ2
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-20 15:47:40  更:2021-09-20 15:48:44 
 
开发: 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年5日历 -2024/5/22 4:19:35-

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