RNN时间序列预测(1)-Tensorflow入门,MNIST学习

来源:互联网 发布:java高并发架构 编辑:程序博客网 时间:2024/05/17 22:24
Title Content 原文 https://github.com/jikexueyuanwiki/tensorflow-zh/blob/master/tex_pdf/tensorflow_manual_cn.pdf 说明 因为要做RNN的时间序列分析,先根据其MNIST,理清楚tensorflow的处理流程,以下是学习摘要

2.1.1 MNIST数据集

import input_datamnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

数据集为3类:训练、测试、验证
每个MNIST的数据单元由两部分:图片+图片标签

图片:为二维28*28,可展开为向量784
图片标签:假设为0~9,则可将其转化为10维向量,是第i个标签,对应值就是1,其他为0

2.1.2 softmax regression介绍

softmax模型可以用来给不同的对象分配概率

softmax regression 步骤:
(1)对输入被分类对象属于某个类的“证据”相加求和
(2)将此“证据”的和转化为概率

“证据”:
(1)如果图片的像素强有力的体现属于某一个类,则为正,否则为负
(2)额外“证据”引入:Bias(偏置)
目的:希望“证据”代表了与输入无关的判断证据

evidencei=jWi,jxj+bi
xj=xj
bi=i
evidencei=xi

y=softmax(evidence)
y=(activation)or(link)
softmax=

2.1.3 实现回归模型

由于在运算过程共,如果在python内完成,其资源浪费严重、效率低下。tensorflow可以预先将模型相关的定义,可以用图描述这些可交互的计算操作,然后一起在python外运行。
也就是正常情况下,我们调用定义的函数,一般会在python里直接运行了,但是tensorflow的机制,更像是把函数的调用编程了新的函数证明·声明,存到变量里面,最后同伙特殊的会话操作启动运算。

(1)导入tensorflow:

import tensorflow as tf

(2)通过符号变了存储可交互的操作单元:

x = tf.placeholder("float",[None, 784])

x是一个占位符,定义了2维浮点张量来表示MNIST图像,张量形状[None,784], None表示可以是任意值

(3)定义模型参数权重、偏置

W = tf.Variable(tf.zeros[784, 10])b = tf.Variable(tf.zeros[10])

W和b都是模型需要学习的参数,初始化可以随意设置为0

(4)实现模型

y = tf.nn.softmax(tf.matmul(x,W)+b)

2.1.4 训练模型

(1)模型指标定义
指标用于度量模型的成本(cost)or损失(lost),然后尽量最小化这个指标
经典成本函数:交叉熵(cross-entropy),可以理解为衡量预测值用于描述真想的低效性

交叉熵计算:

y = tf.placeholder("float", [None, 10])cross_entropy = -tf.reduce_sum(y_*tf.log(y))

(2)选择优化方案

Tensorflow拥有一张秒速你各个计算单元的图,可以自动地利用反向传播算法有效地确定你的变量如何影响你想要最小化的那个成本值,它会用你选的优化算法来不断的修改变量,以减低成本

trian_step = tf.train.GrandientDescentOptimizer(0.01).minimize(cross_entropy)0.01 = 学习率

(3)初始化创建的变量

init = tf.initialize_all_variables()

(4)用“会话”模型启动

sess = tf.Session()sess.run(init)

(5)模型训练

for i in range(1000):    batch_xs, batch_ys = mnist.train.next_batch(100)    sess.run(train_step, feed_dict={x:batch_xs, y_:batch_ys})

模型训练1000次,每次随机抓取一批处理数据点(100个),用这一批的数据点作为参数,替换之前的占位符来训练train_step

2.1.5 模型评估

(1)检测预测与真值是否匹配

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_1,1))tf.argmax(y,1) = 代表模型认为最可能的标签tf.argmax(y_,1) = 正确的标签

(2)根据匹配结果布尔,定义正确预测比

accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))

(3)计算测试集正确率

print sess.run(accuracy, feed_dict={x:mnist.test.images, y_:mnist.test.labels}) 
0 0
原创粉丝点击