python 从入门到砸门 Tensorflow笔记 入门篇001

**

python 从入门到砸门 Tensorflow学习记录 001 MNIST

**

所谓学问,本有学有问,但此文乃学渣笔记,故其中竟多是问题,少是经验教学,不明之处恳请大牛赐教,本人适做整理工作,愿为广大程序猿尽绵薄之力尔。

  • MNIST数据集
    关于tensorflow 的安装,此处不做说明。先引用一下Tensorflow
    import tensorflow as tf
    再引用 input_data:
    第一次使用代码时:import input_data 报错,百度后得知,应该用如下代码:
    from tensorflow.examples.tutorials.mnist import input_data
    加载数据集:此处将下载好的数据集放在MNIST_data文件夹内即可
    mnist = input_data.read_data_sets(‘MNIST_data’, one_hot=True)import input_data

  • 实现回归模型
    思路:将手写数字特征向量化,这里可能需要用一些数学思维去理解,将向量化后的各项指标与数据集中数据进行比对,计算出各特征值之间的数学关系,实现输入图片-转化图片-数学处理-判定图片数字。
    图片特征:
    输入手写数字的图片处理,在MNIST中,对输入手写数字处理为一个2维浮点数的张量
    x=tf.placeholder(“float”,shape=[None,784])
    实际正确数字表示:
    y_=tf.placeholder(“float”,shape=[None,10])
    构建模型:
    y=x*w+b
    定义W权重:并初始值为0
    W=tf.Variable(tf.zeros([784,10]))
    定义偏置量: 并初始值为0
    b=tf.Variable(tf.zeros([10]))
    判断y与实际y_的差值,判断识别的准确情况。
    y=tf.nn.softmax(tf.matmul(x,W)+b)
    sess = tf.InteractiveSession()
    sess.run(tf.initialize_all_variables())
    cross_entropy = -tf.reduce_sum(y_*tf.log(y))

  • 训练模型
    train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
    for i in range(1000):
    batch = mnist.train.next_batch(50)
    train_step.run(feed_dict={x: batch[0], y_: batch[1]})
    如果出现内存溢出的情况:应当修改代码为:
    for i in range(1000):
    batch = mnist.train.next_batch(50)
    feed_dict={x: batch[0], y_: batch[1]}
    train_step.run(feed_dict)
    同时,在评估模型时同步修改为:
    print accuracy.eval(feed_dict)

  • *评估模型
    通过argmax求索引,看预测值与实际值是否一致
    correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, “float”))
    print accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels})

学习过程中,遇到最大的问题大概就是内存溢出了,直接电脑死机,其他问题尚待探究。
比如,为什么迭代次数与准确率并不是增函数。
此处为一段输出结果:
step 0 training accuracy 0.06
step 100 training accuracy 0.92
step 200 training accuracy 0.92
step 300 training accuracy 0.94
step 400 training accuracy 0.94
step 500 training accuracy 0.98
step 600 training accuracy 0.92
step 700 training accuracy 1.0
step 800 training accuracy 0.94
step 900 training accuracy 0.9
step 1000 training accuracy 0.94
step 1100 training accuracy 0.96
step 1200 training accuracy 0.92
step 1300 training accuracy 0.98
step 1400 training accuracy 0.94
test accuracy 0.98
可以看出,随着迭代次数的增加,准确率虽然正相关,但并不是一个增函数,其中的函数还有很大的研究空间,函数中的参数也还没开始研究,希望有大神补充完善。

你可能感兴趣的:(笔记)