前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【学习笔记】动手学深度学习

【学习笔记】动手学深度学习

作者头像
Livinfly
发布2023-04-01 11:08:48
4810
发布2023-04-01 11:08:48
举报
文章被收录于专栏:Livinfly

环境配置 - 本地安装

代码语言:javascript
复制
# 以下操作处于conda环境下

conda env list # 查看建立过的环境
conda env remove d2l-zh # 如果发现建立过名为d2l-zh的环境可以删掉重建
conda create -n d2l-zh python=3.8 # 建立名字为d2l-zh的环境
conda activate d2l-zh # 激活刚刚创建的环境

# 下载需要的包 (下载比较慢可以加上国内源 -i https://pypi.douban.com/simple)
pip install jupyter d2l torch torchvision 

# 下载代码
wget https://zh-v2.d2l.ai/d2l-zh.zip 
unzip d2l-zh.zip
jupyter notebook

数据操作

代码语言:javascript
复制
import torch

# 张量
x = torch.arange(12)
x
代码语言:javascript
复制
tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
代码语言:javascript
复制
# shape属性,访问形状和元素总数
x.shape
代码语言:javascript
复制
torch.Size([12])
代码语言:javascript
复制
# number of elements
x.numel()
代码语言:javascript
复制
12
代码语言:javascript
复制
X = x.reshape(3, 4)
X
代码语言:javascript
复制
tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])
代码语言:javascript
复制
# 产生全为0的2*3*4
torch.zeros((2, 3, 4))
代码语言:javascript
复制
tensor([[[0., 0., 0., 0.],
         [0., 0., 0., 0.],
         [0., 0., 0., 0.]],

        [[0., 0., 0., 0.],
         [0., 0., 0., 0.],
         [0., 0., 0., 0.]]])
代码语言:javascript
复制
# # 产生全为1的2*3*4
torch.ones((2, 3, 4))
代码语言:javascript
复制
tensor([[[1., 1., 1., 1.],
         [1., 1., 1., 1.],
         [1., 1., 1., 1.]],

        [[1., 1., 1., 1.],
         [1., 1., 1., 1.],
         [1., 1., 1., 1.]]])
代码语言:javascript
复制
# 特定的一个值
torch.tensor([[[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]]])
代码语言:javascript
复制
tensor([[[2, 1, 4, 3],
         [1, 2, 3, 4],
         [4, 3, 2, 1]]])
代码语言:javascript
复制
torch.tensor([[[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]]]).shape
代码语言:javascript
复制
torch.Size([1, 3, 4])
代码语言:javascript
复制
# 计算
x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 3])
x+y, x-y, x*y, x/y, x**y
代码语言:javascript
复制
(tensor([ 3.,  4.,  6., 11.]),
 tensor([-1.,  0.,  2.,  5.]),
 tensor([ 2.,  4.,  8., 24.]),
 tensor([0.5000, 1.0000, 2.0000, 2.6667]),
 tensor([  1.,   4.,  16., 512.]))
代码语言:javascript
复制
# 更多的运算
torch.exp(x)
代码语言:javascript
复制
tensor([2.7183e+00, 7.3891e+00, 5.4598e+01, 2.9810e+03])
代码语言:javascript
复制
# 将张量连结起来
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]])
# dim 按第i维合并
torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1)
代码语言:javascript
复制
(tensor([[ 0.,  1.,  2.,  3.],
         [ 4.,  5.,  6.,  7.],
         [ 8.,  9., 10., 11.],
         [ 2.,  1.,  4.,  3.],
         [ 1.,  2.,  3.,  4.],
         [ 4.,  3.,  2.,  1.]]),
 tensor([[ 0.,  1.,  2.,  3.,  2.,  1.,  4.,  3.],
         [ 4.,  5.,  6.,  7.,  1.,  2.,  3.,  4.],
         [ 8.,  9., 10., 11.,  4.,  3.,  2.,  1.]]))
代码语言:javascript
复制
# 按照元素值进行判断
X == Y
代码语言:javascript
复制
tensor([[False,  True, False,  True],
        [False, False, False, False],
        [False, False, False, False]])
代码语言:javascript
复制
# 对张量中的所用元素求
X.sum()
代码语言:javascript
复制
tensor(66.)
代码语言:javascript
复制
# 维度一样,形状不同,复制拓展成一样再加(广播机制)
a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
a, b, a+b
代码语言:javascript
复制
(tensor([[0],
         [1],
         [2]]),
 tensor([[0, 1]]),
 tensor([[0, 1],
         [1, 2],
         [2, 3]]))
代码语言:javascript
复制
# 读取
X[-1], X[1:3]
代码语言:javascript
复制
(tensor([ 8.,  9., 10., 11.]),
 tensor([[ 4.,  5.,  6.,  7.],
         [ 8.,  9., 10., 11.]]))
代码语言:javascript
复制
#写入
X[1, 2] = 9
X
代码语言:javascript
复制
tensor([[ 0.,  1.,  2.,  3.],
        [ 4.,  5.,  9.,  7.],
        [ 8.,  9., 10., 11.]])
代码语言:javascript
复制
X[0:2, :] = 12
X
代码语言:javascript
复制
tensor([[12., 12., 12., 12.],
        [12., 12., 12., 12.],
        [ 8.,  9., 10., 11.]])
代码语言:javascript
复制
# 有些操作不是原地操作 id 相当于C++的指针地址
before = id(Y)
Y = Y+X
id(Y) == before
代码语言:javascript
复制
False
代码语言:javascript
复制
# 原地操作
Z = torch.zeros_like(Y)
print('id(Z):', id(Z))
Z[:] = X+Y
print('id(Z):', id(Z))
代码语言:javascript
复制
id(Z): 1988936663664
id(Z): 1988936663664
代码语言:javascript
复制
# 后续没有重复使用X,减少内存开销
before = id(X)
X += Y
id(X) == before
代码语言:javascript
复制
True
代码语言:javascript
复制
# NumPy张量
A = X.numpy()
B = torch.tensor(A)
type(A), type(B)
代码语言:javascript
复制
(numpy.ndarray, torch.Tensor)
代码语言:javascript
复制
# 大小为1的张量转外为Python的标量
a = torch.tensor([3.5])
a, a.item(), float(a), int(a)
代码语言:javascript
复制
(tensor([3.5000]), 3.5, 3.5, 3)

数据预处理

代码语言:javascript
复制
# 创建一个人工数据集,存在csv中
import os
os.makedirs(os.path.join('..', 'data'), exist_ok=True)
data_file = os.path.join('..', 'data', 'house_tiny.csv')
with open(data_file, 'w') as f:
    f.write('NumRooms, Alley, Price\n') # 列名
    f.write('NA, Pave, 127500\n') # 样本
    f.write('2, NA, 107500\n')
    f.write('4, NA, 185500\n')
    f.write('NA, NA, 140000\n')
代码语言:javascript
复制
# 读取csv文件 - pandas
import pandas as pd

data = pd.read_csv(data_file)
data

NumRooms

Alley

Price

0

NaN

Pave

127500

1

2.0

NA

107500

2

4.0

NA

185500

3

NaN

NA

140000

代码语言:javascript
复制
# 处理缺失的数据 - 插值和删除
# 一种常用的是,有缺失就丢掉
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean())
# 因为第二行是字符串,不存在均值,没有发生变化
inputs

NumRooms

Alley

0

3.0

Pave

1

2.0

NA

2

4.0

NA

3

3.0

NA

代码语言:javascript
复制
inputs = pd.get_dummies(inputs, dummy_na=True)
inputs

NumRooms

Alley_ NA

Alley_ Pave

Alley_nan

0

3.0

0

1

0

1

2.0

1

0

0

2

4.0

1

0

0

3

3.0

1

0

0

代码语言:javascript
复制
import torch

X, Y = torch.tensor(inputs.values), torch.tensor(outputs.values)
X, Y
代码语言:javascript
复制
(tensor([[3., 0., 1., 0.],
         [2., 1., 0., 0.],
         [4., 1., 0., 0.],
         [3., 1., 0., 0.]], dtype=torch.float64),
 tensor([127500, 107500, 185500, 140000]))
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023年03月30日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境配置 - 本地安装
  • 数据操作
  • 数据预处理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档