提示:建议先阅读days36-38的内容。TensorFlow?是一个开源软件库,用于使用数据流图进行数值计算。节点代表图中的数学运算,图中的边代表节点之间相互连接的多维数据数组,即张量。其灵活的架构让您可以在各种平台上运行计算,例如台式计算机、服务器、移动设备等中的一个或多个CPU(或GPU)。TensorFlow最初是由谷歌大脑组(谷歌机器智能研究所的一部分)的研究人员和工程师开发的,用于机器学习和深度神经网络的研究,但该系统的通用性使其广泛适用于其他计算领域。1、安装库tensorflow有些教程推荐安装nightly,适合新环境安装TensorFlow,需要依赖的库也会默认安装。我用蟒蛇。本篇我们安装的是纯净版的tensorflow,非常简单。打开提示即可:pipinstalltensorflowinstalledsuccessfullyandimportedsuccessfully#importkerasfromtensorflowimportkeras#importtensorflowimporttensorflowastf注意:有些教程importKerasUsingimporttensorflow.kerasaskeras会提示Nomodulenamed'tensorflow.keras'2.导入mnist数据。我们在上一篇文章中提到了MNIST,以一种有趣的方式解释了梯度下降算法。它是一个集合了许多28x28像素的手写数字图像(存储在灰度值矩阵中)及其对应的数字数据集,可以理解为下图:由于众所周知的原因,Keras自带了一个minist数据集下载将报错,无法下载。博客园的崔小秋给出了一个很好的解决方案:1.在本地的keras目录下找到mnist.py文件,一般都是在这个目录下。2、下载mnist.npz文件到本地,下载链接如下。https://pan.baidu.com/s/1C3c2...3。修改mnist.py文件为如下内容,并保存from__future__importabsolute_importfrom__future__importdivisionfrom__future__importprint_functionfrom..utils.data_utilsimportget_fileimportnumpyasnpdefload_data(path='mnist.npz'):"""加载MNISTdataset.#参数path:本地缓存数据集的路径(相对于~/.keras/datasets)。#返回xinarofray`Numpy,y_train),(x_test,y_test)`."""path='E:/Data/Mnist/mnist.npz'#这里的路径就是刚才存放mnist.py的目录。注意斜杠f=np.load(path)x_train,y_train=f['x_train'],f['y_train']x_test,y_test=f['x_test'],f['y_test']f.close()return(x_train,y_train),(x_test,y_test)看数据mnist=tf.keras.datasets.mnist(x_train,y_train),(x_test,y_test)=mnist.load_data()print(x_train[0].shape)(28,28)importmatplotlib.pyplotaspltplt.imshow(x_train[0],cmap=plt.cm.binary)plt.show()print(y_train[0])5归一化数据x_train=tf.keras。utils.normalize(x_train,axis=1)x_test=tf.keras.utils.normalize(x_test,axis=1)再看一遍,图像的像素值限制在[0,1]plt.imshow(x_train[0],cmap=plt.cm.binary)plt.show()3构建和训练模型我们使用Keras的Sequential模型(sequentialmodel),它是多个网络层的线性堆叠。本文旨在介绍TensorFlow和Keras的使用,不再展开。有兴趣的同学可以参考Keras的文档:https://keras.io/zh/getting-s...model=tf.keras。models.Sequential()model.add(tf.keras.layers.Flatten(input_shape=(28,28)))model.add(tf.keras.layers.Dense(128,activation=tf.nn.relu))model.add(tf.keras.layers.Dense(128,activation=tf.nn.relu))model.add(tf.keras.layers.Dense(10,activation=tf.nn.softmax))model.compile(优化器='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])model.fit(x_train,y_train,epochs=3)我们搭建的模型是这样的,不同的是我们的隐藏层有128个每个单元的训练过程,我们会发现损失值(loss)在减小,而准确率(accuracy)在增加,最终达到满意的水平。Epoch1/360000/60000-8s127us/step-loss:0.2677-acc:0.9211Epoch2/360000/60000-8s130us/step-loss:0.1106-acc:0.9655000/60000-us8s136/step-loss:0.0751-acc:0.97644testmodelval_loss,val_acc=model.evaluate(x_test,y_test)print(val_loss)print(val_acc)10000/10000-0s45us/step0.09330912lossand92精度好像是okay,尝试识别训练集predictions=model.predict(x_test)print(predictions)用argmax分析(即找到最大数对应的索引,也就是识别数)importnumpyasnpprint(np.argmax(predictions[0]))7plt.imshow(x_test[0],cmap=plt.cm.binary)plt.show()OK,模型可以识别数字了。5、保存模型主要用于模型的存储和恢复。model.save('epic_num_reader.model')#加载保存的模型new_model=tf.keras.models.load_model('epic_num_reader.model')#测试保存的模型predictions=new_model.predict(x_test)print(np.argmax(predictions[0]))看到这里是真爱,推荐一个Keras教程Colab超火的Keras/TPU深度学习免费练习,有一点Python基础就能看懂的速成课程参考:https://www.cnblogs。com/shinn...https://www.cnblogs.com/wj-13...https://github.com/MLEveryday...
