• 动手学深度学习 | 数据操作+数据预处理 | 02


    数据操作

    图片是三维的: w*h*channel

    图片集是四维的:batch_size*w*h*channel

    一个视频批量是五维的:batch_size*t*w*h*channel

    这里解释最后一个,行::3表示从第一个开始,每次步长为3,::2表示从第一个开始,每次步长为2

    数据操作实现

    操作总结

    import torch # 导入torch
    x = torch.arange(12) # 创建一个一维张量
    x.shape # 查看tensor的shape的元素个数
    X = x.reshape(3,4) # 改变一个tensor的形状
    torch.zeros((2,3,4)) torch.ones((2,3,4)) torch.randn(3,4) # 创建特定的tensor
    torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]]) # 将Python的list转换为tensor
    
    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的基本运算
    
    torch.exp(x) # e^x
    
    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) # 列合并 水平拼接
    
    X==Y # 给一个bool tensor,判断其中的元素是否相等
    X.sum() # 将所有元素相加, 最后只产生一个元素的tensor
    
    # 广播机制
    # 没有维度或维度为1才能进行广播机制(就是按照原来的元素按照维度进行复制)
    a = torch.arange(3).reshape((3, 1))
    b = torch.arange(2).reshape((1, 2))
    a + b # 两张量的shape不一致,符合条件会进行广播机制
    
    X[-1], X[1:3] # 元素的选择
    X[1, 2] = 9 # 给指定元素赋值
    X[0:2, :] = 12 # 切片赋值
    
    # 什么操作会导致新的变量产生
    Y = Y + X # Y会变成新的变量
    Z = torch.zeros_like(Y)
    Z[:] = Y+X # 修改操作,Z不会是一个新的变量
    X += Y # +=这样的操作也不会有新的变量产生
    
    A = X.numpy() # tensor转换为tensor
    
    a = torch.tensor([3.5])
    a,a.item(),float(a),int(a) # 将tensor转换为标量
    

    数据预处理实现

    操作总结

    # 自己创建一个人工数据集
    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
    ')
        f.write('NA,Pave,127500
    ')
        f.write('2,NA,106000
    ')
        f.write('4,NA,178100
    ')
        f.write('NA,NA,140000
    ')
    
    import pandas as pd
    data = pd.read_csv(data_file) # 读取csv文件,成df对象
    
    # 将数据分为inputs、outputs
    inputs,outputs = data.iloc[:,:2],data[:,2]
    inputs = input.fillna(inputs.mean()) # 使用插值的方法补缺失值
    # 将字符串的缺失值(缺失值也是一种类别),使用one-hot编码处理
    # 要给字符串类别编码就是使用 one-hot 阿!
    inputs = pd.get_dummies(inputs,dummy_nan=True)
        
    # 现在inputs,outputs都是数值了,可以直接转换为tensor
    import torch
    X,y = torch.tensor(inputs.values),torch.tensor(outputs.values)
    
    
    

    QA

    1. reshape是不会产生新的对象的,还是和原来同一个内存地址

    1. tensor和array有什么区别?

    tensor是有明确的数学定义的,array是计算机的术语。

    但是在这里我们不做过多区分,可以简单理解为tensor就是 n-dim array。

    1. 如果新变量生成,旧变量是否会自动释放?

    如果旧变量没有使用的话,Python会帮忙释放内存。

    所以关于内存管理,在Python这里是不用过分担心的。

  • 相关阅读:
    Android深度探索--第三章读后感
    Android深度探索--第二章读后感
    Android深度探索--第一章读后感
    android深度探索第十章心得体会
    android深度探索第九章心得体会
    android深度探索第八章心得体会
    深度探索android第七章
    Android 深度探索第六章
    深度探索android第五章
    Android深度探索第四章读后感
  • 原文地址:https://www.cnblogs.com/Rowry/p/15303665.html
Copyright © 2020-2023  润新知