1、数据
MNIST
2、任务
对手写数字的图片进行分类,转成 0~9 一共 10 类
3、Softmax Regression 工作原理
可以判定为某类的特征相加,然后将这些特征转化为判定是这一类的概率
4、计算流程
5、损失
交叉熵
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNUST_data/", one_hot = True)
print(mnist.train.images.shape, mnist.train.labels.shape)
print(mnist.test.images.shape, mnist.test.labels.shape)
print(mnist.validation.images.shape, mnist.validation.labels.shape)
# Extracting MNUST_data/train-images-idx3-ubyte.gz
# Extracting MNUST_data/train-labels-idx1-ubyte.gz
# Extracting MNUST_data/t10k-images-idx3-ubyte.gz
# Extracting MNUST_data/t10k-labels-idx1-ubyte.gz
# (55000, 784) (55000, 10)
# (10000, 784) (10000, 10)
# (5000, 784) (5000, 10)
sess = tf.InteractiveSession()
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
# softmax regression
y = tf.nn.softmax(tf.matmul(x, W) + b)
# loss
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices = [1]))
# SGD
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
# 全局参数初始化
tf.global_variables_initializer().run()
# train
for i in range(1000):
# 每次抽取100条数据
batch_xs, batch_ys = mnist.train.next_batch(100)
train_step.run({x:batch_xs, y_ : batch_ys})
# 返回分类是否正确的类别
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
# cast
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(accuracy.eval({x : mnist.test.images, y_ : mnist.test.labels}))
# output 0.9211
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
</div>