TensorFlow实现Softmax Regression(回归)识别手写数字。MNIST(Mixed National
Institute of Standards and Technology
database),简单机器视觉数据集,28X28诸如素手写数字,只有灰度值信息,空白部分为0,笔迹根据颜色深浅取[0,
1],
784维,丢弃二维空间信息,目标分0~9共10看似。数据加载,data.read_data_sets,
55000只样本,测试集10000样书,验证集5000样本。样本标注信息,label,10维向量,10种植类one-hot编码。训练集训练模型,验证集检验功能,测试集评测模型(准确率、召回率、F1-score)。

近年来召开个小试验,其中有渴求用表单提交的数目易为double,这个功效实在很粗略直接一句Double.parseDouble(request.getParameter(“chinese”).trim())就可兑现,但坐是统计成绩,所以用保留小数点后少员,所以各种百度发现了重重化解智,这里特别总结下,万一以后又就此上了为?

算法设计,Softmax
Regression训练手写数字识别分类型,估算类别概率,取概率最要命数字作模型输出结果。类特色相加,判定类概率。模型学习训练调整权值。softmax,各类特色计算exp函数,标准化(所有品类输出概率值为1)。y
= softmax(Wx+b)。

 返回double型的

1.克四放弃五切

1 double d = 114.145;
2 d = (double) Math.round(d * 100) / 100;
3 System.out.println(d);

 2. BigDecimal.ROUND_HALF_UP表示四放弃五入,BigDecimal.ROUND_HALF_DOWN也是五放弃六可,BigDecimal.ROUND_UP代表进位处理(就是一直加1),BigDecimal.ROUND_DOWN表示一直去丢尾数。

1 double d = 114.145;
2 BigDecimal b = new BigDecimal(d);
3 d = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();        
4 System.out.println(d);

NumPy使用C、fortran,调用openblas、mkl矩阵运算库。TensorFlow密集复杂运算在Python外执行。定义计算图,运算操作不需每次将运算完的多寡传Python,全部每当Python外面运行。

 返回String型的

1.#.00表示保留后少各,它的处理方式是直接截掉不要的尾数,不四放弃五可。

1 double d = 114.145;
2 DecimalFormat df = new DecimalFormat("#.00");
3 String str = df.format(d);
4 System.out.println(str);

 2.%.2f意味保留后少号,它的处理方式也是一直截掉不要的尾数,不四放弃五适合。

1 double d = 114.145;
2 String.format("%.2f", d);

 3.RoundingMode.HALF_DOWN表示 五放弃六合乎,负数先取绝对值再五放弃六相符再负数,RoundingMode.HALF_UP:表示四放弃五合,负数先取绝对值再五放弃六切再负数。

1 double d = 114.145
2 NumberFormat nf = NumberFormat.getNumberInstance();
3 // 保留两位小数
4 nf.setMaximumFractionDigits(2); 
5 // 如果不需要四舍五入,可以使用RoundingMode.DOWN
6 nf.setRoundingMode(RoundingMode.UP);
7 System.out.println(nf.format(d));

 

import tensor flow as tf,载入TensorFlow库。less =
tf.InteractiveSession(),创建InteractiveSession,注册为默认session。不同session的数量、运算,相互独立。x
= tf.placeholder(tf.float32, [None,784]),创建Placeholder
接收输入数据,第一参数数据类型,第二参数代表tensor shape
数据尺寸。None不限条数输入,每条输入为784维向量。

tensor存储数据,一旦采用掉就会磨灭。Variable以范训练迭代中持久化,长期存在,每轮迭代更新。Softmax
Regression模型的Variable对象weights、biases
初始化为0。模型训练自动学习共同适值。复杂网络,初始化方法主要。w =
tf.Variable(tf.zeros([784,
10])),784风味维数,10像样。Label,one-hot编码后10维向量。

Softmax Regression算法,y = tf.nn.softmax(tf.matmul(x, W) +
b)。tf.nn包含大量神经网络组件。tf.matmul,矩阵乘法函数。TensorFlow将forward、backward内容自动实现,只要定义好loss,训练自动求导梯度下降,完成Softmax
Regression模型参数自动学习。

定义loss
function描述问题模型分类精度。Loss越聊,模型分类结果以及真价值更小,越规范。模型初始参数全零,产生初始loss。训练目标是减多少loss,找到全局最地道或一些最优解。cross-entropy,分类问题经常因此loss
function。y预测概率分布,y’真实概率分布(Label
one-hot编码),判断模型对真实概率分布预测准确度。cross_entropy =
tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y),
reduction_indices=[1]))。定义placeholder,输入真实label。tf.reduce_sum求和,tf.reduce_mean每个batch数据结果求均值。

概念优化算法,随机梯度下降SGD(Stochastic Gradient
Descent)。根据计算图自动求导,根据反向传播(Back

Propagation)算法训练,每轮迭代翻新参数减多少loss。提供包装优化器,每轮迭代feed数据,TensorFlow在后台自动补充运算操作(Operation)实现反往传播和梯度下降。train_step

tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)。调用tf.train.GradientDescentOptimizer,设置上进度0.5,设定优化目标cross-entropy,得到训练操作train_step。

tf.global_variables_initializer().run()。TensorFlow全局参数初始化器tf.golbal_variables_initializer。

batch_xs,batch_ys =
mnist.train.next_batch(100)。训练操作train_step。每次随机从训练集抽取100长条样本构成mini-batch,feed给
placeholder,调用train_step训练样本。使用小有样本训练,随机梯度下降,收敛速度再快。每次训练一切样本,计算量大,不便于跳出局部最妙。

correct_prediction = tf.equal(tf.argmax(y,1),
tf.argmzx(y_,1)),验证模型准确率。tf.argmax从tensor寻找最深价值序号,tf.argmax(y,1)求预测数字概率最特别,tf.argmax(y_,1)找样本真实数字型。tf.equal判断预测数字型是否对,返回计算分类操作是否是。

accuracy =
tf.reduce_mean(tf.cast(correct_prediction,tf.float32)),统计全部样书预测正确度。tf.cast转化correct_prediction输出值类型。

print(accuracy.eval({x: mnist.test.images,y_:
mnist.test.labels}))。测试数据特征、Label输入评测流程,计算模型测试集准确率。Softmax
Regression MNIST数据分类识别,测试集平均准确率92%左右。

TensorFlow 实现简单机器算法步骤:
1、定义算法公式,神经网络forward计算。
2、定义loss,选定优化器,指定优化器优化loss。
3、迭代训练多少。
4、测试集、验证集评测准确率。

概念公式只是Computation Graph,只有调用run方法,feed数据,计算才实施。

    from tensorflow.examples.tutorials.mnist import input_data
    mnist = input_data.read_data_sets("MNIST_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)
    import tensorflow as tf
    sess = tf.InteractiveSession()
    x = tf.placeholder(tf.float32, [None, 784])
    W = tf.Variable(tf.zeros([784, 10]))
    b = tf.Variable(tf.zeros([10]))
    y = tf.nn.softmax(tf.matmul(x, W) + b)
    y_ = tf.placeholder(tf.float32, [None, 10])
    cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
    train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
    tf.global_variables_initializer().run()
    for i in range(1000):
        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))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    print(accuracy.eval({x: mnist.test.images, y_: mnist.test.labels}))

 

参考资料:
《TensorFlow实战》

接付费咨询(150处女诸小时),我的微信:qingxingfengzi