tensorflow学习笔记_01

最近看到一个有趣的项目pix2pix-tensorflow。大概功能是用户在网页上画一只猫的轮廓,然后它就可以输出与这个轮廓很相似的猫的清晰图片。出于好奇,就想研究一下这个项目是如何实现的,于是跳入了tensorflow机器学习这个坑。

tensorflow是什么

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。TensorFlow最初由Google Brain团队开发,用于Google的研究和生产,于2015年11月9日在Apache 2.0开源许可证下发布。

TensorFlow是Google Brain的第二代机器学习系统,2015年11月9日,参考实现作为开源软件发布。虽然参考实现运行在单台设备,TensorFlow可以运行在多个CPU和GPU(和可选的CUDA扩展)。它运行在64位Linux或macOS桌面或服务器系统,以及在移动计算平台上,包括Android和iOS。TensorFlow的计算用有状态的数据流图表示。许多Google团队已从DistBelief迁移到TensorFlow进行研究和生产。这个库的算法源于Google需要指导称为神经网络的计算机系统,类似人类学习和推理的方法,以便派生出新的应用程序承担以前仅人类能胜任的角色和职能;TensorFlow的名字来源于这类神经网络对多维数组执行的操作。这些多维数组被称为“张量”,但这个概念并不等同于张量的数学概念。其目的是训练神经网络检测和识别模式和相互关系。

tensorflow安装

安装过程很简单,就是普通的python库安装方法,这里重点说一下windows下安装tensorflow的方法,玩其它系统的用户看看官方文档肯定能搞定安装。

  • 安装64位3.5.x版的python,安装包从这里下载
  • 安装cpu版本或gpu版本(如果有NV的显卡的话)的tensorflow

1

C:\> pip3 install --upgrade tensorflow

1

pip3 install --upgrade tensorflow-gpu

写个hello world入门程序

学什么东西,先上个hello world入门程序

helloworld.py

import tensorflow as tf

greeting = tf.constant("hello world!", dtype=tf.string)

with tf.Session() as sess:
    print(sess.run(greeting))

然后执行它

python helloworld.py
b'hello world!'

正常输出hello world!了。

这个小程序逻辑很简单,解释一下:先用tensorflow定义图的结构,就定义了一个tf.string的常量greeting,然后在打开的tensorflow会话里运行并得到这个张量的值,最后用print打印出来。

一个入门的例子

先上代码:

demo1.py

import tensorflow as tf
# 下载mnist并加载MNIST的训练数据
import tensorflow.examples.tutorials.mnist.input_data as input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
# 定义两个外部传入的张量
x = tf.placeholder(tf.float32, [None, 784])
y = tf.placeholder("float", [None, 10])
# 定义要训练学习的变量
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
# 使用softmax回归模型计算出预测的y
prediction_y = tf.nn.softmax(tf.matmul(x, W) + b)
# 使用交叉熵计算预测的y与实际的y的损失
loss = -tf.reduce_sum(y*tf.log(prediction_y))
# 使用梯度下降算法以0.01的学习速率最小化交叉熵
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
# 计算预测的y与实际的y是否匹配,返回为[True, False, True, True...]
correct_prediction = tf.equal(tf.argmax(prediction_y, 1), tf.argmax(y, 1))
# 计算上一步计算出来的张量的平均值
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
with tf.Session() as sess:
    # 在图中初始化所有变量
    sess.run(tf.global_variables_initializer())
    # 循环训练1000次,每次从MNIST的训练数据中随机抽出100条进行训练
    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})
        if i % 10 == 0:
            # 使用MNIST的测试数据计算模型的准确率
            batch_xs, batch_ys = mnist.test.next_batch(100)
            print(sess.run(accuracy, \
                feed_dict={x: batch_xs, y: batch_ys}))

代码里的注释写得比较清楚,就不一一解释了。下面对关键点作个说明。

入门例子关键点分析

  • tensorflow的程序一般分为如下几个部分
    1. 定义包含n个层的tensorflow神经网络的模型,这个模型一般会描述逻辑如何将输入计算为预测的输出
    2. 定义损失函数,损失函数为预测的输出与实际输出的差距
    3. 定义用何种方法优化减小预测的损失
    4. 迭代地输入训练数据,用以训练模型
    5. 训练的过程中定期检测模型的准确率
  • 定义的模型如果要从外部传入张量,一般写法如下:
# 定义外部传入的张量
parma1 = tf.placeholder(tf.float32, [None, 784])

...

with tf.Session() as sess:
    ...
    # 在图中运行时传入张量
    sess.run(val1, feed_dict={parma1: param_value})

  • 定义的模型如果使用了变量,一般写法如下:
# 定义变量
val1 = tf.placeholder(tf.float32, [None, 784])

...

# 初始化所有变量
init = tf.global_variables_initializer()

with tf.Session() as sess:
    # 在图中初始化所有变量
    sess.run(init)
    ...

  • 一个神经网络层一般形式如下

1

l1_output = tf.nn.softmax(tf.matmul(l1_input,W) + b)

其中W为权值,b为偏置,tf.nn.softmax是用来分类的。有可能还会有激励函数,毕竟并不是所有关系都是线性的,激励函数就是用来将线性关系掰弯的,tensorflow里完成此类功能的激励函数有很多,见这里

  • 一个训练step一般形式如下

1

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)

其中tf.train.GradientDescentOptimizer为优化函数,tensorflow里自带的优化函数挺多的,见这里loss为损失函数。

总结

本篇作为tensorflow入门的一个笔记,后面我会再说一说tensorflow里的CNN与RNN。

参考

https://www.tensorflow.org/install/install_windows https://www.tensorflow.org/get_started/mnist/beginners https://www.tensorflow.org/versions/r0.10/api_docs/python

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

教程 | 如何用PyTorch实现递归神经网络?

选自Nvidia.devblogs 作者:James Bradbury 参与:Jane W、吴攀 从 Siri 到谷歌翻译,深度神经网络已经在机器理解自然语言方...

416120
来自专栏大数据挖掘DT机器学习

如何使用sklearn进行数据挖掘?

1.1 数据挖掘的步骤 数据挖掘通常包括数据采集,数据分析,特征工程,训练模型,模型评估等步骤。使用sklearn工具可以方便地进行特征工程和模型训练工作,在...

43260
来自专栏大数据挖掘DT机器学习

用Python开始机器学习:文本特征抽取与向量化

假设我们刚看完诺兰的大片《星际穿越》,设想如何让机器来自动分析各位观众对电影的评价到底是“赞”(positive)还是“踩”(negative)呢? 这类问题就...

873140
来自专栏北京马哥教育

Python数据挖掘:Kmeans聚类数据分析及Anaconda介绍

糖豆贴心提醒,本文阅读时间8分钟 今天我们来讲一个关于Kmeans聚类的数据分析案例,通过这个案例让大家简单了解大数据分析的基本流程,以及使用Python实现...

655130

社交图中的社区检测

在进行社交网络分析时,一个常见的问题是如何检测社区,如相互了解或者经常互动的一群人。社区其实就是连通性非常密集的图的子图。

94280
来自专栏CreateAMind

keras中文文档

Keras是一个极简和高度模块化的神经网络库,Keras由纯Python编写而成并基于Theano或Tensorflow。Keras 为支持快速实验而生,如果你...

31650
来自专栏大数据文摘

一行R代码实现繁琐的可视化

233110
来自专栏Python小屋

Python扩展库scipy中值滤波算法的应用

中值滤波是数字信号处理、数字图像处理中常用的预处理技术,特点是将信号中每个值都替换为其邻域内的中值,即邻域内所有值排序后中间位置上的值。下面的代码演示了scip...

52460
来自专栏iOSDevLog

Python机器学习:Scikit-Learn教程

一个易于理解的scikit-learn教程,可以帮助您开始使用Python机器学习。

60850
来自专栏CSDN技术头条

利用GPU和Caffe训练神经网络

本文为利用GPU和Caffe训练神经网络的实战教程,介绍了根据Kaggle的“奥托集团产品分类挑战赛”的数据进行训练一种多层前馈网络模型的方法,如何将模型应用于...

223100

扫码关注云+社区

领取腾讯云代金券