语音识别学习日志 2018-7-23 [ Hello TensorFlow ]

今天CNN的理解写了一半,感觉理解的不够深刻,就打算先实现几个例子再接着看理论。之后就了解了一下TensorFlow。

python版的tensorflow就是一个工具包,使用pip安装就行了。有CPU和GPU两个版本,刚开始用,安装CPU版本的试一试。谷歌给了几个tensorflow的安装方式,无非就是使用虚拟环境或者装在Docker中,也可以使用Anaconda安装,安装过程不再赘述,具体可以参考Install TensorFlow

值得一提的是Windows版本的TensorFlow不支持python2,只支持python3.5。以前一直用python2,而且我用的环境比较gaoxiao,我是用的win10的linux子系统+windows上的VScode。代码编写使用的是windows上的环境,运行用的是linux子系统上的环境。所以如果让VScode可以对TensorFlow库中的代码进行提示的话,需要在windows的python环境中也安装tensorflow。没办法就全换了Python3,更换linux子系统中默认的python版本时不知道为啥pip和pip3都歇菜了,可能是因为版本不对吧,捣鼓了半天。

安装完找了几个样例跑了一下。第一个就是Hello world。

https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/1_Introduction/helloworld.py

https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/1_Introduction/helloworld.ipynb

第二个是基本操作,就是熟悉一下TensorFlow工具使用的套路,然后就是搜一搜代码里面出现的一些函数的用法。

https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/1_Introduction/basic_operations.py

https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/1_Introduction/basic_operations.ipynb

第三个就是一个经典的使用MNIST数据的例子。模型搭建用的是线性回归。

中间参考了一篇博客,以及TensorFlow文档中使用MNIST数据训练回归模型的讲解

模型的大概形状如下图:

MNIST数据集的具体参数就看官方文档中的MNIST数据训练回归模型的讲解吧。

MNIST数据集如果不能自动下载,就从http://yann.lecun.com/exdb/mnist/下载,一共四个文件,下载完不用解压,改改代码中的数据路径,或者放到代码中的路径中就行了。

下面是我做的练习,每段代码的意思都加到注释里了,里面如果有不懂的函数就搜一下,不再一个一个说了。

# coding:utf-8
# 参考 "https://blog.csdn.net/u013569304/article/details/81175006"
#      "http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_beginners.html"
from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
import numpy as np

# 数据集位置,如果该位置没有数据会自动下载,不过可能因为网络问题无法下载。
# 可以从http://yann.lecun.com/exdb/mnist/下载,一共四个文件,下载完不用解压。
__file = 'MNIST_data/'
__mnist = input_data.read_data_sets(__file, one_hot=True)

# 训练数据的格式,行数为None,表示不固定;
# 列数为784,是MNIST数据集输入数维度,输入集是28*28的点阵,展开后就是一个784维的向量
# 输出集是十个不同的类别(0-9),使用one_hot类型的输出集
__input_x = tf.placeholder(tf.float32, [None, 784])
__train_y_true = tf.placeholder(tf.float32, [None, 10])

# 模型的权重和偏移量
# 变量__W和__b是线性模型的参数
# __W是一个784∗10的矩阵,因为输入有784个特征,同时有10个输出值。
# __b是一个10维的向量,是因为输出有10个分类。
__W = tf.Variable(tf.zeros([784, 10]))
__b = tf.Variable(tf.zeros([10]))

# 创建Session
__session = tf.InteractiveSession()

# 初始化权重变量
__session.run(tf.global_variables_initializer())

# 构建回归模型(0-9的概率)
__output_y = tf.nn.softmax(tf.matmul(__input_x, __W) + __b)

# 使用交叉熵作为损失函数
__cross_entropy = tf.reduce_mean(
    -tf.reduce_sum(__train_y_true*tf.log(__output_y)))

# region 训练
# 使用梯度下降法优化模型,学习率为0.01。
# 训练周期为1000,每个训练周期使用60个样本
__train_op = tf.train.GradientDescentOptimizer(
    0.01).minimize(__cross_entropy)
for i in range(10):
  __batch = __mnist.train.next_batch(60)
  __session.run(
      __train_op, feed_dict={__input_x: __batch[0], __train_y_true: __batch[1]})
  tmp=__session.run(
      __output_y, feed_dict={__input_x: __batch[0], __train_y_true: __batch[1]})
  for tt in tmp:
    for pp in tt:
      print("%.2f, " % pp,end="")
    print()
# endregion


# region 测试
# 从测试集取200个样本测试
__test_x, __test_y_true = __mnist.test.next_batch(200)

# 使用训练好的模型预测测试集结果(得到一个list)
__perdict_num_list = __session.run(
    tf.argmax(__output_y, 1), feed_dict={__input_x: __test_x})

__accuracy = 0
for i in range(len(__test_x)):
  __test_y_true_i = np.argmax(__test_y_true[i])
  # session.run(tf.argmax(__test_y[i],1)) ????
  print("Test", i, ",[ Perdiction Value:", __perdict_num_list[i],
        "  True Value:", __test_y_true_i, "]", end="")
  if __perdict_num_list[i] == __test_y_true_i:
    print(', Answer: pass')
    __accuracy += 1./len(__test_x)
  else:
    print(', Answer: fail')
print("Accuracy:", __accuracy)
# endregion

__session.close()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值