一、深度学习关系及其概念
由大到小:人工智能->机器学习->神经网络->深度学习
1、应用:
①图片识别②目标检测③语义分割④图片生成⑤机器翻译⑥聊天机器人⑦文本生成⑧虚拟游戏⑨机器人⑩自动驾驶
2、学习框架为tensorflow
①在官网下载最新Anaconda
https://www.anaconda.com/download
②下载完毕之后打开Anaconda Prompt(i后面可跟其他镜像源)
pip install tensorflow -i https://mirrors.aliyun.com/pypi/simple/
③打开Jupyter Notebook,用浏览器访问本地8888
http://localhost:8888/
④右上角即可新建一个python文件
快捷键:
命令模式:Esc
编辑模式:enter
markdown模式:M
回到代码模式 : Y
运行并跳到下一段:shift+enter
只运行当前代码块:ctrl+enter
剪切:X
执行当前代码块并新建一个代码块:alt+enter
在上方新建一个:A(bove)
在下方新建一个:B(elow)
删除当前代码块:双击D
复制:C
粘贴:V
合并选中的单元格:Shift + M
分割cell中鼠标所在的位置:Ctrl + Shift + -
查看所有快捷键:H
二、TensorFlow操作
1、创建常量tf.constant()
//导入模块,后面的就不加了,tf的都是tensorflow模块
import tensorflow as tf
//不同类型
tf.constant(1)
tf.constant("hello")
tf.constant(True)
//向量
tf.constant([1,2])
//矩阵
tf.constant([[1,3,5],[3,4,7]])
//张量
tf.constant([
[[1,2,3],[3,4,5]],
[[5,6,6],[7,8,6]],
[[5,6,6],[7,8,6]],
[[5,6,6],[7,8,6]]
])
2、精度设置
精度分类如下:
tf.bool
tf.int16
tf.int32
tf.int64
tf.float16
tf.float32
tf.float64
//设置精度:
tf.constant(1, dtype = tf.int16)
//读取精度:
x.dtype
//转换精度:
tf.cast(x, tf.float32)
3、创建特殊的张量
//创建全为1或0张量
tf.zeros([2,2])
tf.ones([2,2])
//创建自定义数值张量
//两行两列,全为99
tf.fill([2,2],99)
//建已知分布张量
//均匀分布
tf.random.uniform([1,5])
//正态分布
tf.random.normal([1,5])
4、切片
左闭右开!
5、增加/删除维度
//增加,在第二个维度后增加一个维度
tf.expand_dims(x,axis=2)
//降低,删除第二个维度
tf.squeeze(x,axis=2)
//变换维度
tf.reshape(x,[2,4,4,3])
tf.transpose(x,perm=[2,4,4,3])
6、运算符
7、合并和堆叠
注意:合并不改变维度,堆叠会改变
tf.concat([a,b],axis=0)
a.shape:[4,35,8]
b.shape:[6,35,8]
合成之后为[10,35,8]
tf.stack([a,b], axis = 0)
a.shape: [35,8] (2维)
b.shape: [35,8] (2维)
堆叠:[2,35,8] (3维)
注意:如果这的axis为1,那么结果是[35,2,8]
8、分割
result = tf.split(x, num_or_size_splits=[4,2,2,2],axis=0)
//第一个维度上
9、数据统计
//均值
tf.reduce_mean(x)
//最大值
tf.reduce_max(x)
//最小值
tf.reduce_min(x)
其中Softmax函数的含义就在于不再唯一的确定某一个最大值,而是为每个输出分类的结果都赋予一个概率值,表示属于每个类别的可能性。
import tensorflow as tf
logits = tf.constant([1, 2, 3, 4, 5], dtype=tf.float32)
softmax_result = tf.nn.softmax(logits)
print(softmax_result.numpy())
10、填充
//4张28*28的彩色图片,shape为:(4,28,28,3)
//但是神经网络只接受32*32的图片输入
tf.pad(x,[[0,0],[2,2],[2,2],[0,0]])
三、回归问题
1、梯度下降法
假设x与y线性关系:y=wx+b
找到合适的w——最小二乘法,机器——梯度下降
具体步骤:
①用随机值初始化权重和偏差
②把输入传入网络,得到输出值
③计算预测值和真实值之间的误差(均方误差)
④对每一个产生误差的神经元调整相应的权重,减小误差
⑤重复迭代,直到得到网络权重的最佳值
2、均方误差最小化
找到一条直线,使所有样本到直线上的欧式距离之和最小
四、分类问题
注:回归问题中的结果为连续值,分类问题中的结果值为离散值。
1、归一化和标准化
①归一化:使得预处理的数据限定在一定的范围内,例如限定在[0,1],消除奇异样本带来的不良影响。好处是可以让每一层的输入大致固定。
②标准化:使得数据变为均值为0,标准差为1的正态分布。
2、数据偏移
某类的数据量过多或过少
解决方法:对数据进行筛选,但这样也容易去除大部分的数据,使得模型不准确。
3、f1-score
TP:预测正,结果正
FP:预测正,结果反
TN:预测反,结果反
FN:预测反,结果正
准确率:TP+TN/(TP+TN+FP+FN)
精确度:TP/(TP+FP)
召回率:TP/(TP+FN)
4、欠拟合和过拟合
欠拟合:表达能力弱,训练集和测试集的结果都不好
解决:
①增加神经网络层数
②增大隐藏层的参数量
③增大训练轮数
④查看学习率是否过低
过拟合:表达能力过强,训练集结果非常好,但是测试集结果很差
解决:
①减小神经网络的参数量
②提前停止
③使用正则化
④加入Dropout层
⑤数据增强/提升数据量