TensorFlow深度学习-第一章
人工智能、机器学习和神经网络之间的关系如下图:
DQN、PPO
其中
通过
自动学习权重的神经元模型-感知机。输出值o和真实值y之间的误差用于调整神经元的权重系数{w_1,w_2,…,w_n}
现代深度学习的基础:反向传播法BackPropagation
LSTM
1982年John Hopfildde
的循环连接的Hopfild网络提出
1997年LSTM
被提出
多层神经网络在MNIST
数据集上的取得了优于SVM
的效果
提出将线性整流单元Rectfied Linear Unit,ReLU
作为激活函数
2012 年,Alex Krizhevsky 提出了 8 层的深层神经网络 AlexNet,它采用了 ReLU 激活函数Dropout 技术防止过拟合,同时抛弃了逐层预训练的方式,直接在 2 块 GTX580 GPU 上训 练网络。
2014 年,Ian Goodfellow
提出了生成对抗网络
2016 年,DeepMind
公司应用深度神经 网络到强化学习领域,提出了 DQN
算法,
非常依赖并行加速计算设备,目前的大部分神经网络均使用 NVIDIA GPU 和 Google TPU 或其他神经网络并行加速芯片训练模型参数
随着深度学习的兴起和计算能力的提升,AlexNet(8 层),VGG16(16 层), GoogLeNet(22 层),ResNet50(50 层),DenseNet121(121 层)等模型相继被提出,同时输入图 片的大小也从 28x28 逐渐增大,变成 224x224,299x299 等,这些使得网络的总参数量可达 到千万级别,
都是采用动态图(优先)模式开发,动态图模型开发效率高,但是运行效率可能不如静态图模式
TensorFlow 在工业界拥有完备的解决方案和用户基础; PyTorch 得益于其精简灵活的接口 设计,可以快速设计调试网络模型,在学术界获得好评如潮
import tensorflow as tf
# 创建张量
a = tf.constant(2.0)
b = tf.constant(4.0)
# 直接打印
print(a+b)
神经网络本质上由大量的矩阵相乘,矩阵相加等基本数学运算构成;TensorFlow 的重 要功能就是利用 GPU 方便地实现并行计算加速功能。
# 创建在cpu上运算的2个矩阵
import tensorflow as tf
with tf.device('/cpu:0'):
cpu_a = tf.random.normal([1,n])
cpu_b = tf.random.normap([1,n])
print(cpu_a.device, cpu_b.device)
# 创建在gpu上运算的2个矩阵
with tf.device('/gpu:0'):
cpu_a = tf.random.normal([1,n])
cpu_b = tf.random.normap([1,n])
print(gpu_a.device, gpu_b.device)
并通过 timeit.timeit()
函数来测量 2 个矩阵的运算时间:
def cpu_run():
with tf.device('cpu:0'):
c = tf.matmul(cpu_a, cpu_b)
return c
def gpu_run():
with tf.device('gpu:0'):
c = tf.matmul(gpu_a, gpu_b)
return c
# 第一次计算需要热身
cpu_time = timeit.timeit(cpu_run,number=10)
gpu_time = timeit.timeit(gpu_run,number=10)
# 计算10次,取平均值
cpu_time =
timeit.timeit(cpu_run, number=10)
gpu_time = timeit.timeit(gpu_run,number=10)
2 . 自动梯度网络
在使用 TensorFlow 构建前向计算过程的时候,除了能够获得数值结果,TensorFlow 还 会自动构建计算图 ,看个demo:
考虑在点(a,b,c,w)= (1,2,3,4)的导数为10
import tensorflow as tf
# 创建4个张量
a = tf.constant(1.)
b = tf.constant(2.)
c = tf.constant(1.)
w = tf.constant(4.)
with tf.GradientTape as tape: # 构建梯度环境
# 将w加入梯度跟踪列表
tape.watch([w])
# 计算过程
y = a * w ** 2 + b * w + c
[dy_dw] = tape.gradient(y, [w])
print(dy_dw) # 打印导数
tf.Tensor(10.0, shape=(), dtype=float32)
3 . 常用神经接口
TensorFlow
除了提供底层的矩阵相乘,相加等运算函数,还内建了常用