TensorFlow识别MNIST
本文主要是 通过Softmax对MNIST进行分类,通过一个简单的前馈神经网络模型实现,以此
(1).熟悉 算法工程 工作内容都有那些.
(2).熟悉TensorFlow框架的原理和使用
(3).熟悉Softmax和简单的网络模型
(4).熟悉基于python的TensorFlow框架工具
TensorFlow识别 MNIST
具体实现见:kaggle-digit-rec-tensorflow:ipynb
TensorFlow Version: 2.11.0
书中 使用的是 python2.7、tensorflow 1.14.0; 使用方式上有些差异. (可以关注下差异)
1.1 import
引入依赖1
2
3
4
5
6
7
8
9
10
11import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
from scipy.io import loadmat
import matplotlib.pyplot as plt # 用于图像相关
import tensorflow as tf
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.models import Sequential
from tensorflow.keras.utils import to_categorical
1.2 数据下载
tf2.x 也可以通过 下载数据.
1 | # 引入依赖 |
1.3 数据查看
1 | # 查看数据形状 |
1.4 数据预处理
1 | print(images.shape) |
创建TensorFlow数据集1
2
3
4
5
6
7
8
9
10
11# 创建TensorFlow数据集
train_images = mnistImages[:60000]
train_labels = model_labels[:60000]
test_images = mnistImages[60000:]
test_labels = model_labels[60000:]
train_dataset = tf.data.Dataset.from_tensor_slices((train_images, train_labels)).batch(32)
test_dataset = tf.data.Dataset.from_tensor_slices((test_images, test_labels)).batch(32)
print(train_images.shape)
print(train_labels.shape)
1.5 创建模型并训练
创建一个简单的序贯模型
1 | # 创建一个简单的序列模型 |
1.6 评估模型
1 | # 评估模型 |
1 | data_index = 10108 |
原理
训练
基础知识:Softmax回归(线性的多元分类模型).
Softmax目的:将打分结果(向量) 转化为 0-1区间的概率.
假设 x是单个样本的特征, W、b 是 Softmax模型的参数。
- 对样本的理解: 这里 一条数据就是 一个样本,包含了一个特征向量。 (业务中: 也可以用id表示一个样本 ? )
在MNIST中,x就代表输入的图片, 它是一个 784维度的向量,而W是一个矩阵。
它的形状是 (784,10) , b是一个10维的向量。10代表的是类别数。
1.2.1 Softmax
Softmax回归是一个线性的多类分类模型。 实际上是直接从 Logiistic回归模型转化而来的。
区别在于Logistic回归模型为两类分类模型,而Softmax模型为多分类模型.
1 | 什么是回归? |
逻辑回归公式:
$ h_\theta(x) = \frac{1}{1 + e^{-\theta^Tx}} $
Softmax回归公式:
$ Y_k = \frac{e^{Logit_k}}{\sum_{j=1}^{K} e^{Logit_j}} $
1.3 使用Softmax对MNIST分类
1.3.1 计算Logit
(简单的线性模型)
通过一下公式计算各个类别的Logit
$ \text{Logit} = z = W^T x + b $
1 | W 是权重矩阵, |
1.3.2 使用Softmax函数
(激活函数-Softmax函数, 用于将线性组合转换为每个类别的概率分布)
使用Softmax函数将它转换为各个类别的概率值将
1.3.3 Softmax回归在TensorFlow中的实现
代码详见:Kaggle:digit-rec-tensowflow
todo:别的算法, 分别的结果评估、效果比对
总结算法公共工作过程?Tensorflow的原理和使用