TensorFlow是Google公司2015年11月开源的第二代深度学习框架,是第一代框架DistBelief的改进版本.

TensorFlow支持python和c/c++语言, 可以在cpu或gpu上进行运算, 支持使用virtualenv或docker打包发布.

TensorFlow支持python2.7可以使用pip安装.仅使用cpu的版本:

 pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl

若安装了CUDA可以使用开启gpu支持的版本:

 pip install https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl

开始使用

TensorFlow并不是一个纯粹的神经网络框架, 而是使用数据流图进行数值分析的框架.

TensorFlow使用有向图(graph)表示一个计算任务.图的节点称为ops(operations)表示对数据的处理,图的边flow 描述数据的流向.

该框架计算过程就是处理tensor组成的流. 这也是TensorFlow名称的来源.

TensorFlow使用tensor表示数据. tensor意为张量即高维数组,在python中使用numpy.ndarray表示.

TensorFlow使用Session执行图, 使用Variable维护状态.tf.constant是只能输出的ops, 常用作数据源.

下面我们构建一个只有两个constant做输入, 然后进行矩阵乘的简单图:

from tensorflow import Session, device, constant, matmulwith Session() as session:  # 创建执行图的上下文with device('/cpu:0'):  # 指定运算设备mat1 = constant([[3, 3]])  # 创建源节点mat2 = constant([[2], [2]])product = matmul(mat1, mat2) # 指定节点的前置节点, 创建图result = session.run(product) # 执行计算print(result)# I tensorflow/core/common_runtime/local_device.cc:25] Local device intra op parallelism threads: 4
#I tensorflow/core/common_runtime/local_session.cc:45] Local session inter op parallelism threads: 4
#[[12]]

如果不使用with session()语句, 需要手动执行session.close().

with device设备指定了执行计算的设备:

  • "/cpu:0": 机器的 CPU.

  • "/gpu:0": 机器的第一个 GPU, 如果有的话.

  • "/gpu:1": 机器的第二个 GPU, 以此类推.

下面使用Variable做一个计数器:

from tensorflow import Session, constant, Variable, add, assign, initialize_all_variablesstate = Variable(0, name='counter') # 创建计数器
one = constant(1) # 创建数据源: 1
val = add(state, one) # 创建新值节点
update = assign(state, val) # 更新计数器
setup = initialize_all_variables() # 初始化Variable
with Session() as session:session.run(setup) # 执行初始化print(session.run(state)) # 输出初值for i in range(3):session.run(update) # 执行更新print session.run(state) # 输出计数器值# 0
# 1
# 2
# 3

在使用变量前必须运行initialize_all_variables()返回的图, 运行Variable节点将返回变量的值.

本示例中将构建图的过程写在了上下文之外, 而且没有指定运行设备.

上面示例中session.run只接受一个op作为参数, 实际上run可以接受op列表作为输入:

session.run([op1, op2])

上述示例一直使用constant作为数据源, feed可以在运行时动态地输入数据:

from tensorflow import Session, placeholder, mul, float32input1 = placeholder(float32)
input2 = placeholder(float32)
output = mul(input1, input2)
with Session() as session:print session.run(output, feed_dict={input1: [3], input2: [2]})

参考资料:

  • github仓库

  • 官网

  • 极客学院wiki - tensorflow文档中文版

实现一个简单神经网络

神经网络是应用广泛的机器学习模型, 关于神经网络的原理可以参见这篇随笔, 或者在tensorflow playground上体验一下在线demo.

首先定义一个BPNeuralNetwork类:

class BPNeuralNetwork:def __init__(self):self.session = tf.Session()self.input_layer = Noneself.label_layer = Noneself.loss = Noneself.trainer = Noneself.layers = []def __del__(self):self.session.close()

编写一个生成单层神经网络函数,每层神经元用一个数据流图表示.使用一个Variable矩阵表示与前置神经元的连接权重, 另一个Variable向量表示偏置值, 并为该层设置一个激励函数.

def make_layer(inputs, in_size, out_size, activate=None):weights = tf.Variable(tf.random_normal([in_size, out_size]))basis = tf.Variable(tf.zeros([1, out_size]) + 0.1)result = tf.matmul(inputs, weights) + basisif activate is None:return resultelse:return activate(result)

使用placeholder作为输入层.

self.input_layer = tf.placeholder(tf.float32, [None, 2])

placeholder的第二个参数为张量的形状, [None, 1]表示行数不限, 列数为1的二维数组, 含义与numpy.array.shape相同.这里, self.input_layer被定义为接受二维输入的输入层.

同样使用placeholder表示训练数据的标签:

self.label_layer = tf.placeholder(tf.float32, [None, 1])

使用make_layer为神经网络定义两个隐含层, 并用最后一层作为输出层:

self.layers.append(make_layer(self.input_layer, 1, 10, activate=tf.nn.relu))
self.layers.append(make_layer(self.layers[0], 10, 1, activate=None))

可以看到第一个隐含层接受input_layer的二维输入并产生十维输出, 第二隐含层接受来自第一隐含层的十维输入并产生一维输出.

可以对比第二隐含层的输出和训练标签定义损失函数:

self.loss = tf.reduce_mean(tf.reduce_sum(tf.square((self.label_layer - self.layers[1])), reduction_indices=[1]))

tf.train提供了一些优化器, 可以用来训练神经网络.以损失函数最小化为目标:

self.trainer = tf.train.GradientDescentOptimizer(learn_rate).minimize(self.loss)

使用Session运行神经网络模型:

initer = tf.initialize_all_variables()
# do training
self.session.run(initer)
for i in range(limit):self.session.run(self.trainer, feed_dict={self.input_layer: cases, self.label_layer: labels})

使用训练好的模型进行预测:

self.session.run(self.layers[-1], feed_dict={self.input_layer: case})

完整源代码在这里查看.

上述模型虽然简单但是使用不灵活, 作者采用同样的思想实现了一个可以自定义输入输出维数以及多层隐含神经元的网络, 可以参见这里.

转载于:https://www.cnblogs.com/Finley/p/5953122.html

tensorflow入门指南相关推荐

  1. TensorFlow 2.0 快速入门指南 | iBooker·ApacheCN

    原文:TensorFlow 2.0 Quick Start Guide 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则>,生活 ...

  2. 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题

    入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集 GT_Zhang关注 0.1012019.08.01 18:43:34字数 1,874阅读 795 Hi,欢迎各位来自Paddl ...

  3. 【AI参赛经验】深度学习入门指南:从零开始TinyMind汉字书法识别——by:Link

    各位人工智能爱好者,大家好! 由TinyMind发起的#第一届汉字书法识别挑战赛#正在火热进行中,比赛才开始3周,已有数只黑马冲进榜单.目前TOP54全部为90分以上!可谓竞争激烈,高手如林.不是比赛 ...

  4. 博士大佬为机器学习总结的人工智能入门指南!

    今天给大家推荐一位认识的好朋友:top985高校AI博士(本硕博985),CSDN博客专家,其开源了周志华西瓜书<机器学习>纯手推笔记!荣登趋势榜,标星600+ Github | 博士大佬 ...

  5. 用python公众号开书城步骤_资源 | 开放Python书籍:一本短小精悍的初学者入门指南...

    资源 | 开放Python书籍:一本短小精悍的初学者入门指南 作者:机器之心 来源:机器之心 公众号 分享到: 03-25 选自GitHub机器之心整理 参与:思源 如何快速熟悉 Python 编程一 ...

  6. tensorflow入门_TensorFlow法律和统计入门

    tensorflow入门 by Daniel Deutsch 由Daniel Deutsch TensorFlow法律和统计入门 (Get started with TensorFlow on law ...

  7. Auto-Keras与AutoML:入门指南

    在本教程中,你将学习如何使用Auto-Keras(Google的AutoML的开源替代品)来实现自动化机器学习和深度学习. 目前来说,深度学习从业者在数据集上训练神经网络时,主要正在尝试优化和平衡两个 ...

  8. TensorFlow 入门 | iBooker·ApacheCN

    原文:Getting Started with TensorFlow 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则>,生活原 ...

  9. 深度学习入门指南:从零开始TinyMind汉字书法识别

    深度学习入门指南:从零开始TinyMind汉字书法识别 这几天在刷这个新出的比赛,受举办方邀请谢了一篇文章,也转到CSDN来和大家分享下吧.话说TinyMind不是被CSDN收购了么,我这算不算把统一 ...

最新文章

  1. python join split
  2. mysql表恢复报错binlog_mysql数据恢复,利用binlog2sql快速闪回
  3. android .a .so区别,.so,.la和.a库文件有什么区别?
  4. SQL字符串处理函数大全
  5. SpringMvc 面试题
  6. 639 页《深度学习:Deep Learning》硬核课程 PPT 下载
  7. 斗鱼赴美递交IPO招股书:拟登陆纽交所 融资5亿美金
  8. oracle更新视图。
  9. php整么去掉时间的年月日,php强大的时间转换函数strtotime
  10. mac 安装adb工具
  11. oracle getpy,拼音
  12. C#生成Excel出现8000401a的错误的另一种解决办法。
  13. 接口测试简介以及接口测试用例设计思路
  14. SAP中计划策略的后台配置框架分析解读
  15. cesium label和billboard 的一些配置注释
  16. 学乐高和机器人编程区别
  17. 路由变化时使用axios取消所有请求
  18. 手机下拉框是怎么做出来
  19. copyproperties爆红_一屋模玩怎样不能价值300万?分分钟用超.......
  20. 企业新闻媒体资源有哪些类型?从哪里找?

热门文章

  1. ACM MM 2022 Call for Papers
  2. RANet:MSDNet加强版!清华黄高团队提出分辨率自适应的高效推理网络RANet!
  3. 【含内推码】字节跳动智能创作2022秋招提前批全面开启!
  4. 别再抱怨 TensorFlow2.0 辣鸡了,会了是“真香”
  5. 近期两篇双目图像超分辨算法论文解读 |AAAI2020 SPL2020
  6. python Scrapy爬取天气预报,零基础的你也可以快速上手
  7. 零美术基础逆袭成为动画师!你需要怎么做?
  8. 收藏 | EfficientNet模型的完整细节
  9. Transformer10个重要问题
  10. 收藏 | 目标检测的模型集成与实验