Idealisan

使用TensorFlow训练MNIST数据集模型

此处使用的mnist数据集由TensorFlow包提供,仅需要导入TensorFlow即可。使用的是keras接口,仅仅20行代码就能完成整个任务,此处着重于了解

  • 数据集在python运行时的中的形式(数据结构)
  • 使用TensorFlow搭建神经网络的各个参数的意义

 

代码:

  1. import tensorflow as tf
    								
  2.  
  3. mnits=tf.keras.datasets.mnist
    												
  4. (train_x,train_y),(test_x,test_y)=mnits.load_data()
    																
  5.  
  6. train_x=train_x/255.0 test_x=test_x/255.0
    													
  7.  
  8. model=tf.keras.models.Sequential([
    													
  9.     tf.keras.layers.Flatten(),
    											
  10.     tf.keras.layers.Dense(128,activation='relu'),
    																	
  11.     tf.keras.layers.Dense(10,activation="softmax")
    																	
  12. ])
    				
  13.  
  14. model.compile(optimizer='adam',
    											
  15.               loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
    																	
  16.               metrics=['sparse_categorical_accuracy']
    							
  17. 
    						)
    					
  18.  
  19. model.fit(train_x,train_y,batch_size=32,epochs=5,validation_data=(test_x,test_y),validation_freq=1)
    																													
  20. model.summary()
    							

 首先在第6行处设置断点观察样例数据的结构。样本数据中Y是标签,是简单的一个一维数组,每个元素是标签的标号。X是样本,test中有一万个样例,每个样例是一个28行28列的图像像素值组成的二维数组,所以test_x是一个一万个对象的数组,其中的每个对象是一幅图像的二维数组。

第九行Flattern()将每张图片的二维数组表示方式转换为一维数组的表示方式,变成一个784个元素的一维数组。

第十行表示第一层神经网络使用128个神经元(为什么是128?)使用relu函数(斜坡函数)作为激活函数。

第十一行表示第二层神经网络使用10个神经元,因为手写数字识别的结果是0-9十个数字,十个分类。使用softmax函数将结果转换为符合概率分布的值。

优化器使用的是adam;from_logits=False意味着神经网络的预测结果不是原始值,而是经过变换得到的孵化概率分布的值,此处是使用softmax函数转换过的所以不是logits(logits指未经转换的不符合概率分布的值)。如果最后一层神经网络的输出结果没有做符合概率分布的处理,那么使用from_logits=True。

分类

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注