动手学习深度学习:1.基础

打开jupyter

1.打开 anaconda prompt

在这里插入图片描述

2、

conda activate pytorch

3、

jupyter notebook

在这里插入图片描述

4、已打开

基础

1.N维数组样例

在这里插入图片描述
在这里插入图片描述

2、创建数组

在这里插入图片描述
在这里插入图片描述

基础:数据操作

在这里插入图片描述

  • 张量表示一个数值组成的数组,这个数组可能有多个维度

  • 1、x=torch.arange(12)

    我们可以通过张量的shape属性来访问张量的形状和张量中元素的总数

    x=torch.arange(12)
    x
    
    #
    tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
    
  • 2、x.numel() #这是一个标量

  • 数据类型: x.shape

    x.numel() #这是一个标量
    #12
    
    x.shape
    #torch.Size([12])
    
  • 3、x=x.reshape(3,4) #改变一个张量的形状

    要改变一个张量的形状而不改变元素数量和元素值,我们可以调用reshape函数。

    x=x.reshape(3,4) #改变一个张量的形状
    x
    
    #输出
    tensor([[ 0,  1,  2,  3],
            [ 4,  5,  6,  7],
            [ 8,  9, 10, 11]])
    
  • 4、torch.zeros((2,3,4)) #创建的全为0的 torch.ones((2,3,4)) #创建的全为1的

    使用全0、全1、其他常量或者从特定分布中随机采样的数字

    torch.zeros((2,3,4))  #创建的全为0的
    
    #输出
    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.]]])
    
  • 5、torch.tensor([[1,2,5,4],[5,1,7,7]])

    通过提供包含数值的Python列表(或嵌套列表)来为所需张量中的每个元素赋予确定值

    torch.tensor([[1,2,5,4],[5,1,7,7]])
    #输出
    tensor([[1, 2, 5, 4],
            [5, 1, 7, 7]])
    
  • 6、常见的标准算术运算符(+、-、*、/和**)都可以被升级为按元素运算

    x=torch.tensor([1.0,2,4,8])
    y=torch.tensor([2,2,2,2])
    x+y,x-y,x*y,x/y,x**y
    #输出
    (tensor([ 3.,  4.,  6., 10.]),
     tensor([-1.,  0.,  2.,  6.]),
     tensor([ 2.,  4.,  8., 16.]),
     tensor([0.5000, 1.0000, 2.0000, 4.0000]),
     tensor([ 1.,  4., 16., 64.]))
    
    
    torch.exp(x)#指数
    #输出
    tensor([2.7183e+00, 7.3891e+00, 5.4598e+01, 2.9810e+03])
    
  • 7、众多张量连结在一起 ,矩阵合并,dim=0:上下合并,dim=1,左右拼接

    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)
    
    #矩阵合并,dim=0:上下合并,dim=1,左右拼接
    (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.]]))
    
  • 8、通过逻辑运算符构建二元张量

    x==y
    
    #输出
    tensor([[False,  True, False,  True],
            [False, False, False, False],
            [False, False, False, False]])
    
  • 9、对张量中的所有元素进行求和会产生一个只有一个元素的张量。

    x.sum()
    
    #输出
    tensor(66.)
    
  • 10、即使形状不同,我们仍然可以通过调用广播机制(broadcasting mechanism)来执行按元素操作

    a= torch.arange(3).reshape((3,1))
    b= torch.arange(2).reshape((1,2))
    a,b
    
    #输出
    (tensor([[0],
             [1],
             [2]]),
     tensor([[0, 1]]))
     
     
    a+b
    #输出
    tensor([[0, 1],
            [1, 2],
            [2, 3]])
    
  • 11、除读取外,我们还可以通过指定索引来将元素写入矩阵。

    x[1,2]=9
    x
    #输出
    tensor([[ 0.,  1.,  2.,  3.],
            [ 4.,  5.,  9.,  7.],
            [ 8.,  9., 10., 11.]])
    
  • 12、为多个元素赋值相同的值,我们只需要索引所有元素,然后为它们赋值。

    x[0:2,:]=9
    x
    #输出
    tensor([[ 9.,  9.,  9.,  9.],
            [ 9.,  9.,  9.,  9.],
            [ 8.,  9., 10., 11.]])
    
  • 13、运行一些操作可能会导致为新结果分配内存

    before=id(y)
    y=y+x
    id(y)==before
    
    #输出
    False
    
  • 14、执行原操作

    z=torch.zeros_like(y)
    print('id(z)',id(z))
    
    z[:]=x+y
    print('id(z)',id(z))
    
    #输出
    id(z) 2198435176016
    id(z) 2198435176016
    
    
  • 15、如果在后续计算中没有重复使用,我们也可以使用X[ : ] = x +Y或×+=Y来减少操作的内存开销。

    before=id(x)
    x+=y
    id(x)==before
    
    #输出
    True
    
  • 16、转换为NumPy张量

    A=x.numpy()
    B=torch.tensor(A)
    type(A),type(B)
    
    #输出
    (numpy.ndarray, torch.Tensor)
    
  • 17、将大小为1的张量转换为Python标量

    a=torch.tensor([3.5])
    a,a.item(),float(a),int(a)
    
    #输出
    (tensor([3.5000]), 3.5, 3.5, 3)
    

基础:数据预处理

1、创建一个人工数据集,并存储在csv (逗号分隔值)文件

import os

os.makedirs(os.path.join('.','data'),exist_ok=True) #创建文件夹
data_file=os.path.join('.','data','house_tiny.csv') #文件名: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,106000\n')
    f.write('4,NA,178100\n')
    f.write('NA,NA,140000\n')

2、从创建的csv文件中加载原始数据集

#如果没有安装pandas ,取消下一行注释
# !pip install pandas
import pandas as pd

data=pd.read_csv(data_file)
print(data)

#输出
   NumRooms Alley   Price
0       NaN  Pave  127500
1       2.0   NaN  106000
2       4.0   NaN  178100
3       NaN   NaN  140000

3、为了处理缺失的数据,典型的方法包括插值删除,这里,我们将考虑插值

inputs,outputs=data.iloc[:,0:2],data.iloc[:,2]
inputs=inputs.fillna(inputs.mean())   #NumRooms 填成平均值
print(inputs)

#输出
   NumRooms Alley
0       3.0  Pave
1       2.0   NaN
2       4.0   NaN
3       3.0   NaN

4、对于inputs中的类别值或离散值,我们将“NaN”视为一个类别。

inputs=pd.get_dummies(inputs,dummy_na=True)
print(inputs)

#输出
   NumRooms  Alley_Pave  Alley_nan
0       3.0           1          0
1       2.0           0          1
2       4.0           0          1
3       3.0           0          1

5、现在inputs和outputs 中的所有条目都是数值类型,它们可以转换为张量格式。

import torch
x,y=torch.tensor(inputs.values),torch.tensor(outputs.values)
x,y

#输出
(tensor([[3., 1., 0.],
         [2., 0., 1.],
         [4., 0., 1.],
         [3., 0., 1.]], dtype=torch.float64),
 tensor([127500, 106000, 178100, 140000]))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
动手深度学习 pytorch.pdf》是一本关于深度学习和PyTorch框架的学习教材。它由苏剑林等人编写,以PyTorch作为工具,全面介绍了深度学习的基本原理和应用。该教材主要分为6个部分,包括深度学习基础、计算机视觉、自然语言处理、生成对抗网络、深度强化学习和工作实践。通过大量的例子和实践,读者可以深入理解深度学习的核心概念以及如何使用PyTorch实现深度学习模型。 首先,教材通过深度学习基础部分介绍了神经网络的基本原理、损失函数、优化算法等核心知识。接着,计算机视觉部分详细解释了图像分类、目标检测、图像风格转换等任务的实现方法。在自然语言处理部分,教材展示了如何用深度学习模型进行文本分类、语义理解等任务。生成对抗网络部分讲解了生成模型、判别模型和生成对抗训练等关键概念。深度强化学习部分介绍了如何使用深度学习与强化学习相结合解决控制问题。最后的工作实践部分通过实际场景案例,指导读者如何将深度学习应用到实际项目中。 《动手深度学习 pytorch.pdf》内容详实,既有理论知识又有实际应用的案例,适合既想理解深度学习基本原理又想动手实践的读者。无论是初学者还是有一定基础学习者,都可以通过这本教材系统地学习深度学习和PyTorch。总之,这本教材是学习深度学习的一本宝典,可以帮助读者快速入门并深入掌握深度学习和PyTorch的使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值