深度学习入门学习记录(一)

文章目录

  • 深度学习入门学习记录(一)
  • 一、数据处理基础知识
  • 二、数据预处理
    • 1.创建一个人工数据集,并且储存在csv的文件

一、数据处理基础知识

x = torch.arange(12)  # 张量(tensor)表示由一个数值组成的数组,这个数组可能有多个维度。
print(x)  # tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
print(x.shape)  # 用shape访问张量的形状 torch.Size([12])
print(x.numel())  # 访问元素中的总数  12x = x.reshape(3, 4)  # 改变张量的形状而不改变元素的值  crtl+/可以批量注释代码 (H,W)(行,列)
print(x)
# tensor([[ 0,  1,  2,  3],
#         [ 4,  5,  6,  7],
#         [ 8,  9, 10, 11]])
x = torch.zeros((2, 3, 4))  # 使用全0生产一个张量     (C,H,W)(通道,行,列)
print(x)
# 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.]]])
x = torch.ones((2, 3, 4))  # 使用全1生产一个张量
print(x)
# 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.]]])
x = torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])  # 通过嵌套列表[]创建一个二维数组
print(x)
# tensor([[2, 1, 4, 3],
#         [1, 2, 3, 4],
#         [4, 3, 2, 1]])
x = torch.tensor([[[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]], [[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]]])  # 通过嵌套列表[]创建一个三维数组
print(x)
# tensor([[[2, 1, 4, 3],
#          [1, 2, 3, 4],
#          [4, 3, 2, 1]],
#
#         [[2, 1, 4, 3],
#          [1, 2, 3, 4],
#          [4, 3, 2, 1]]])# x + y, x - y, x * y, x / y, x ** y  **运算符是求幂运算x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
print(x + y)
print(x - y)
print(x * y)
print(x / y)
print(x ** y)  # 底是x,幂次是y
print(torch.exp(x))  # 求指数的运算
# 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.])
# tensor([2.7183e+00, 7.3891e+00, 5.4598e+01, 2.9810e+03])# 可以把多个张量连接在一起
x = torch.arange(12, dtype=torch.float32).reshape((3, 4))  # 按浮点型生产一个0-11的一维数组再变成一个3*4的二维数组
y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
print(x)
print(y)
c = torch.cat((x, y), dim=0)  # 把两个元素合并在一起,在0维度的情况下(在行)
d = torch.cat((x, y), dim=1)  # 把两个元素合并在一起,在1维度的情况下(在列)
print(c)
print(d)
# tensor([[ 0.,  1.,  2.,  3.],
#         [ 4.,  5.,  6.,  7.],
#         [ 8.,  9., 10., 11.]])
# tensor([[2., 1., 4., 3.],
#         [1., 2., 3., 4.],
#         [4., 3., 2., 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.]])# 通过逻辑运算符构建二元张量a = torch.arange(1, 13).reshape(3, 4)
b = torch.arange(13, 25).reshape(3, 4)
print(a)
print(b)
print(a == b)
# tensor([[ 1,  2,  3,  4],
#         [ 5,  6,  7,  8],
#         [ 9, 10, 11, 12]])
# tensor([[13, 14, 15, 16],
#         [17, 18, 19, 20],
#         [21, 22, 23, 24]])
# tensor([[False, False, False, False],
#         [False, False, False, False],
#         [False, False, False, False]])print(a.sum())  # 数组所有元素求和  tensor(78)# 即使形状不同(要保证是同维度),仍然可以通过广播机制就行元素操作,即统一为3*2(行的最大,列的最大)
a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
print(a + b)
# tensor([[0, 1],
#         [1, 2],
#         [2, 3]])# 元素的访问
x = torch.arange(12).reshape((3, 4))
print(x)
print(x[1, 2])
print(x[-1])  # 访问最后一行元素
print(x[1:3])  # 访问2-3行元素# tensor([[ 0,  1,  2,  3],
#         [ 4,  5,  6,  7],
#         [ 8,  9, 10, 11]])
#         tensor(6)
# tensor([ 8,  9, 10, 11])
# tensor([[ 4,  5,  6,  7],
#         [ 8,  9, 10, 11]])# 元素的赋值
x = torch.arange(12).reshape((3, 4))
x[1, 2] = 9
x[2:3, :] = 12  # 把第三行都变成12
print(x)
# tensor([[ 0,  1,  2,  3],
#         [ 4,  5,  9,  7],
#         [12, 12, 12, 12]])# 运行一些操作会导致为新结果分配内存c = 1
b = 2
before = id(c)
c = c + b
print(before == id(c))a = torch.arange(1, 13).reshape(3, 4)
b = torch.arange(13, 25).reshape(3, 4)
before = id(a)
a = a + b  # 这里的a是创建新的内存来存放
print(before == id(a))# 执行原地操作
z = torch.zeros_like(a)
before = id(z)
z[:] = a + b  # z[:]是指对z的元素进行改写
print(before == id(z))a = torch.arange(1, 13).reshape(3, 4)
b = torch.arange(13, 25).reshape(3, 4)
before = id(a)
a[:] = a + b  # 这里的a[:]=a+b和a+=b都是直接改写a,没有新建新的变量,可以减少内存开销
a += b
print(before == id(a))# 转换numpy张量
a = torch.arange(1, 13).reshape((3, 4))
a = a.numpy()
b = torch.tensor(a)
print(type(a), type(b))# 将大小为1的张量转换为python标量a = torch.tensor([3.5])
print(a, a.item(), float(a), int(a))# <class 'numpy.ndarray'> <class 'torch.Tensor'>
# tensor([3.5000]) 3.5 3.5 3

二、数据预处理

1.创建一个人工数据集,并且储存在csv的文件

代码如下(示例):

import os
import pandas as pd
import torchos.makedirs(os.path.join('', 'data'), exist_ok=True)  # os.path.join用于拼接文件路径
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,106000\n')f.write('4,NA,178100\n')f.write('NA,NA,140000\n')f.close()data = pd.read_csv(data_file)
print(data)# 为了处理缺失的数据,典型的方法包括插值和删除,这里考虑插值法
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]  # iloc[a,b]  对数据进行位置索引,从而在数据表中提取出相应的数据。 a是行索引,b是列索引
inputs = inputs.fillna(inputs.mean())
print(inputs)
print(outputs)
# 对于inputs中的类别值或离散值,我们将nan视为一个类别
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)# 现在inputs和outputs中所有条目都是数值类型,它们可以转换为张量格式。
x,y = torch.tensor(inputs.values),torch.tensor(outputs)print(x)
print(y)####################NumRooms Alley   Price
0       NaN  Pave  127500
1       2.0   NaN  106000
2       4.0   NaN  178100
3       NaN   NaN  140000NumRooms Alley
0       3.0  Pave
1       2.0   NaN
2       4.0   NaN
3       3.0   NaN
0    127500
1    106000
2    178100
3    140000
Name: Price, dtype: int64NumRooms  Alley_Pave  Alley_nan
0       3.0           1          0
1       2.0           0          1
2       4.0           0          1
3       3.0           0          1
tensor([[3., 1., 0.],[2., 0., 1.],[4., 0., 1.],[3., 0., 1.]], dtype=torch.float64)
tensor([127500, 106000, 178100, 140000])Process finished with exit code 0

深度学习入门笔记(李沐)(一)相关推荐

  1. 深度学习入门笔记系列(三)——感知器模型和 tensorboard 的使用方法

    本系列将分为 8 篇 .今天是第三篇 .主要讲讲感知器模型和 tensorboard 的基本使用方法 . 1. 感知器模型 因为小詹之前写过一篇感知器模型的介绍 ,这里就不赘述了 .有需要巩固的点击如 ...

  2. 深度学习入门笔记系列 ( 二 )——基于 tensorflow 的一些深度学习基础知识

    本系列将分为 8 篇 .今天是第二篇 .主要讲讲 TensorFlow 框架的特点和此系列笔记中涉及到的入门概念 . 1.Tensor .Flow .Session .Graphs TensorFlo ...

  3. 深度学习入门笔记(六):误差反向传播算法

    专栏--深度学习入门笔记 推荐文章 深度学习入门笔记(一):机器学习基础 深度学习入门笔记(二):神经网络基础 深度学习入门笔记(三):感知机 深度学习入门笔记(四):神经网络 深度学习入门笔记(五) ...

  4. 深度学习入门笔记(五):神经网络的学习

    专栏--深度学习入门笔记 推荐文章 深度学习入门笔记(一):机器学习基础 深度学习入门笔记(二):神经网络基础 深度学习入门笔记(三):感知机 深度学习入门笔记(四):神经网络 深度学习入门笔记(五) ...

  5. 深度学习入门笔记(四):神经网络

    专栏--深度学习入门笔记 推荐文章 深度学习入门笔记(一):机器学习基础 深度学习入门笔记(二):神经网络基础 深度学习入门笔记(三):感知机 深度学习入门笔记(四):神经网络 深度学习入门笔记(五) ...

  6. pytorch深度学习入门笔记

    Pytorch 深度学习入门笔记 作者:梅如你 学习来源: 公众号: 阿力阿哩哩.土堆碎念 B站视频:https://www.bilibili.com/video/BV1hE411t7RN? 中国大学 ...

  7. 深度学习入门笔记(十六):计算机视觉之边缘检测

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  8. 深度学习入门笔记(二):神经网络基础

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  9. 深度学习入门笔记(十五):深度学习框架(TensorFlow和Pytorch之争)

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  10. 深度学习入门笔记(五):神经网络的编程基础

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

最新文章

  1. java+jsp+mysql网页制作总结(1)
  2. [2018.12.18]BZOJ1013 [JSOI2008]球形空间产生器sphere
  3. 【每日一包0015】gradient-string
  4. C++中的类对象的内存分布以及虚函数表内存分布
  5. LinkCutTree 总结
  6. Kubernetes基础组件概述
  7. lisp的vla函数画矩形_利用Lisp做Tin三角网建模(源代码)
  8. 为什么机器学习很难学习因果关系?
  9. 关于部分应用无法向POJ提交代码的解决方案
  10. Git:如何在本地没有分支时,切换分支
  11. Android使用MediaRecorder的stop方法报stop failed错误的解决方案
  12. 基于云的文档管理系统——随时随地办公
  13. LSA(潜在语义分析)
  14. 视频教程-OpenGLES萌谷手册(iOS2018版)-其他
  15. MP2451的BUCK电路
  16. Ionic + Vue3 + Capacitor 配置应用信(App 包名、应用名、应用图标、启动动画、版本信息)
  17. 模式识别中精确定位之垂直和水平投影
  18. ubuntu下连接武大校园网
  19. 基于SNMP在网络监控中的应用1_OLT设备的监控
  20. 3dmax人头建模,人物头像建模3dmax人头建模,人物头像建模的详细图文教程来了,实用性非常强的详细图文教程来了,实用性非常强

热门文章

  1. 平安普惠i贷额度抢光
  2. 第一章 Caché 对象介绍
  3. java 制作自定义控件_C#下自定义控件的制作 一
  4. 修改火狐浏览器滚动条样式
  5. 计算机硬盘改造u盘,iPhone扩容硬盘不要扔!变废为宝!手把手教你如何改装U盘...
  6. 关于求字体识别不出来
  7. 数据库索引,真的越建越好吗?
  8. 细观Google全面大揭秘
  9. 中国历史和世界史横向对照表,收藏了长知识。 ​​​​
  10. 已毕业学生的一些建议