发布时间:2022-10-08 11:00
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
Python实战微信订餐小程序 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
Python量化交易实战 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
Keras是由纯python编写的基于theano/tensorflow的深度学习框架。
Keras是一个高层神经网络API,支持快速实验,能够把你的idea迅速转换为结果,如果有如下需求,可以优先选择Keras:
Keras官网首页
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WnKSC4p9-1654449650750)(https://img2022.cnblogs.com/blog/2745075/202206/2745075-20220601225945507-629925755.png “Keras官网首页logo”)]
本次构建神经网络最终目的:输入一张手写数字图片后,网络输出该图片对应的数字。
import tensorflow as tf
from tensorflow.keras.datasets import mnist
如果没有安装TensorFlow,那么可以参考我之前的文章:重装CUDA和cuDNN(目的是装TensorFlow和pytorch)【个人梳理总结】
我们使用Keras下的MNIST手写字符数据集,可以使用如下命令下载数据集:
(train_images, train_labels), (test_images, test_labels) = keras.datasets.mnist.load_data()
'''
load\_data() returns tuple of NumPy arrays: (x\_train, y\_train), (x\_test, y\_test).
train\_images: uint8 NumPy array of grayscale image data with shapes (60000, 28, 28), containing the training data.
Pixel values range from 0 to 255.
train\_labels: uint8 NumPy array of digit labels (integers in range 0-9) with shape (60000,) for the training data.
test\_images: uint8 NumPy array of grayscale image data with shapes (10000, 28, 28), containing the test data.
Pixel values range from 0 to 255.
test\_labels: uint8 NumPy array of digit labels (integers in range 0-9) with shape (10000,) for the test data.
'''
下面是选做步骤~
如果想验证一下各个变量的shape可以使用python中的断言关键字:
assert train_images.shape == (60000, 28, 28)
assert train_labels.shape == (10000, 28, 28)
assert test_images.shape == (60000,)
assert test_labels.shape == (10000,)
我们可以使用matplotlib先为我们显示一下测试集第一张图片,请记住它:
digit = test_images[0]
import matplotlib.pyplot as plt
plt.imshow(digit, cmap=plt.cm.binary) # 输出二值化图像
plt.show()
需要安装matplotlib,请移步至Matplotlib 3.5.2 documentation
或者可以打印test_labels,记住第一个元素的label是什么。
print('test\_labels', test_labels)
不出意外的话结果是“7”。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bXlIYdhg-1654449650755)(https://img2022.cnblogs.com/blog/2745075/202206/2745075-20220605123023429-560745067.png “7”)]
Sequential序贯模型是多个网络层的线性堆叠,也就是“一条路走到黑”。
可以通过向Sequential
模型传递一个layer的list来构造该模型,也可以像本文使用的通过.add()
方法一个个的将layer加入模型中:
from tensorflow.keras import models
from tensorflow.keras import layers
network = models.Sequential() # 创建实例命名为network。Sequential意为顺序的,即序贯模型。
network.add(layers.Dense(512, activation='relu', input_shape=(28*28,))) # 第一层需要加一个input\_shape关键字参数
network.add(layers.Dense(10, activation='softmax')) # ①输出层的units=10,意味着存在10个类别,实际意义为输出的结果是从0~10这是个数字。②我们想要将结果的分类数值范围限定在[0,1]之间,理论上activation也可以换成其他能够将结果限定在[0,1]的激活函数
关于Dense层的理解,可以阅读深入理解 KERAS 中 DENSE 层参数
此时,我们可以通过一些命令整体查看搭建的神经网络(可任选其一):
network.summary() # 输出一下搭建的神经网络框架总结
tf.keras.utils.plot_model(network, "my\_first\_network.png") # 图形化输出
keras.utils.plot_model(network, "my\_first\_network\_with\_shape\_info.png", show_shapes=True) # 带有输入shape和输出shape的图形化输出
输出结果省略,各位可在实践中自行感受。
完成模型的搭建后,我们需要使用.compile()
方法来编译模型:
rmsprop
、adagrad
,或一个Optimizer
类的对象;categorical\_crossentropy
、mse
,也可以为一个损失函数;metrics=['accuracy']
。指标可以是一个预定义指标的名字,也可以是一个用户定制的函数。指标函数应该返回单个张量,或一个完成metric\_name - > metric\_value
映射的字典。