目录
内容预览
之前的课节都是讲述神经网络的概念,这三节课开始涉及到代码层面。主要通过一些案例,展示了TensorFlow的使用以及为什么TensorFlow的输入输出数据都必须是矩阵。然后讲述如何使用TensorFlow从零构建一个神经网络模型的大致过程。
TensorFlow简介
TensorFlow 是实现深度学习算法的领先框架之一。在构建项目时,TensorFlow是最常用的工具之一。另一个流行的工具是 PyTorch。但是在这个专业化课程中,我们将专注于 TensorFlow。
TensorFlow案例(一):咖啡烘焙
1.案例描述
- 温度:生咖啡豆加热到烘焙好的咖啡豆过程中使用的温度。
- 持续时间:烘焙多久。
- 两个输入特征:温度和持续时间。
- 输出标签:烘烤的咖啡是否美味,y=1为好咖啡,y为负值坏咖啡。
- 温度和持续时间都在三角区域,不会温度或持续时间太低导致咖啡豆生,不会温度或持续时间太久导致咖啡豆烤过头。
2.构建神经网络
此案例可以构建一个神经网络来实现:给定一个具有温度和持续时间的特征向量x,使用神经网络推理,推理结果表示在这个时间和温度下,烘焙的咖啡好与坏。
2.1 Dense创建两个层
- 创建第一个隐藏层,x输入为温度和持续时间,使用Dense创建层,设置神经元个数为3,设置激活函数为sigmoid,然后将输入向量x传入层,层经过计算得到激活值a1。
- 创建第二个隐藏层,输入向量变为a1,输出向量a2为0.8。
2.2 设置阈值
使用0.5阈值判断第二层的激活值,由此将最终输出的激活值设置为1或0。
TensorFlow案例(二):图像识别
过程和烘焙咖啡的基本一致,输入向量x表示一张图像的像素亮度值向量。使用Dense创建3个层层,然后每一层的激活项a作为下一层的输入,然后设置阈值判断最终的激活项为1还是0。
TensorFlow的数据类型
1.为什么TensorFlow的数据都是矩阵
- 使用TensorFlow操作数据的时候,数据的格式都是矩阵,即便是只有1行向量,也要将其构建成1行2列的矩阵。
- 因为TensorFlow是被设计用来处理非常大的数据集的,这些数据集用矩阵而不是一维数组来表示,使得TensorFlow内部计算更加高效。
2.Numpy表示矩阵
- 2行3列和4行2列。
- 行向量:只有一行。列向量:只有一列。
3.TensorFlow表示矩阵(tf.Tensor)
tf.Tensor是TensorFlow创建一种数据类型,可以有效表示和计算矩阵。
- 第一层激活项a1为0.2,0.7,0.3,数据类型为tf.Tensor,是一个1行3列的矩阵,数据类型为浮点数。
- 第二层激活项a2为0.8,数据类型为tf.Tensor,是一个1行1列的矩阵,数据类型为浮点数。
4.Tensor转换numpy
- 第一层的激活项a1调用a1.numpy(),就转换成了numpy的形式。
- 第二层的激活项a2也是用numpy()。
使用TensorFlow从零构建一个神经网络
1.构建神经网络层的两种方式
- 如上面看到的两个案例,实现前向传播的神经网络,都是一个层一个层的构建,然后通过传递激活项连接层,做法比较复杂。
- 使用Sequential,直接将各层按顺序传入Sequential,Sequential自动把这些层连在一起形成一个神经网络model,且这些层的激活项传递自动执行前向传播算法,无需手动一个一个设置。
2.构建神经网络的完整过程
- 这里只展示大致的过程,细节下周会讨论。使用Sequential构建了神经网络模型后,通过model.compile(…)编译模型。然后创建了x,y训练集,通过model.fit使用训练集数据训练模型,最终通过model.predict来使用模型预测。
- 可以直接在Sequential构建层,无需传入layer_1,layer_2等变量,是个小优化。