第一章 开篇
深度学习能学到什么?
- 了解深度学习有哪些技术
- 如何实现和调参
- 背后的原因(直觉上、数学上)
深度学习的介绍
AI地图
深度学习能做什么呢?
- 给大量图片分类。
- 物体检测(识别图片中有什么内容,并且图片中的各个物体出现在什么地方)和物体分割(图片中的每一个像素到底是属于飞机还是属于人)。
- 样式迁移(将一张图片的样式换到另一张图片中)
- 人脸合成
- 文字生成图片
- 文字生成
- 无人驾驶
案例研究——广告点击
点击
预测与训练
完整的故事
安装
入门深度学习不同系统的环境安装看这篇就够了
Anaconda 和 Miniconda 都是 Python 的发行版,主要用于 数据科学、机器学习、科学计算,两者的核心区别在于 安装包的大小和默认预装的软件。如果你是Windows系统并且时新手想快速安装环境建议选择Anaconda,一步到位。
第二章 数据操作+数据预处理
数据操作
N维数组样例


创建数组

访问元素

数据操作的实现
我这里采用PyCharm编译器实现,首先我们需要先创建一个demo.py文件,然后导入torch(不是pytorch)
import torch
张量表示一个数值组成的数组,这个数组可能有多个维度

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


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

同时也能创建全0全1的张量

也可以通过列表来创建有初始值的张量

还有一些加减乘除的运算,以及逻辑运算

对张量中的所有元素求和会产生一个只有一个元素的张量

即使形状不同我们也可以通过调用广播机制来执行元素操作

数据预处理

import os import pandas as pd os.makedirs(os.path.join('..','data'),exist_ok=True) data_file = os.path.join('..','data','house_tiny.csv') #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,14000') data = pd.read_csv(data_file) #pandas可以将csv文件里的数据读取进来 print(data)
运行结果:

为了处理缺失的数据,典型的方法包括插值和删除,这里我们将考虑插值
import os
import pandas as pd
import torch
os.makedirs(os.path.join('..','data'),exist_ok=True)
data_file = os.path.join('..','data','house_tiny.csv') #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,14000')
data = pd.read_csv(data_file)
print(data)
inputs,outputs = data.iloc[:,0:2],data.iloc[:,2] #iloc是index和location的简写
# iloc[:,0:2]把第一个的第0和第2列的所有行拿出来放到inputs里面 iloc[:,2]把第二列的所有行拿出来放在outputs里面
# inputs =inputs.fillna(inputs.mean())
inputs.iloc[:,0:1]=inputs.iloc[:,0:1].fillna(inputs.iloc[:,0:1].mean())
# .fillna(...):用指定值填充缺失值。inputs.iloc[:,0:1].mean()计算第一列均值(字符串类型不会加入均值的计算中)
print(inputs)
inputs = pd.get_dummies(inputs,dummy_na=True,dtype=int)
# pd.get_dummies(...)
# pandas 的“独热编码”函数,会把类别型列拆成多列 0/1 变量。
# dummy_na=True
# 默认情况下,缺失值(NaN)会被直接忽略;设成 True 后,会为每一列额外再生成一列 “<原列名>_NaN”,用来指示原来那个值是不是缺失。
# dtype=int
# 指定生成的虚拟列数据类型为 int(默认是 uint8,这里显式改成 int)。
# 结果直接赋值回 inputs
# 相当于原地替换:原来的类别列被删掉,换成一堆 0/1 列(以及可能的 NaN 指示列)。
print(inputs)
x,y = torch.tensor(inputs.values),torch.tensor(outputs.values)
print(x,y)
运行结果:

结果总结:这个样例通过读取一个csv样本的数据文件读取进来做一定的特征域处理处理,然后变成一个pytorch的一个tensor。把原本一种类型的列拆成了两种类型。
线性代数
向量



矩阵




标量由只有一个元素的张量表示
import torch
x = torch.tensor([3.5])
y = torch.tensor([2.0])
print(x+y),print(x*y),print(x/y)
运行结果:

可以将向量视为标量值组成的列表

通过张量的索引来访问任意元素

访问张量的长度

只有一个轴的张量,形状只有一个元素


对称矩阵A等于其转至

就像向量是标量的推广,矩阵是向量的推广一样,我们可以构建具有更多轴的数据结构

给定具有相同形状的任何两个张量,任何按元素二元运算的结果都将是相尚形状的张量

两个矩阵的按元素乘法称为哈达玛积(Hadamard product)(数学符号O)



---------------------------------------------------------------------------------------------------------------------------------都是概念有点难啃,先暂停一下,后续来补。

38万+

被折叠的 条评论
为什么被折叠?



