TensorFlow基础

1、概念

  • TF使用图表示计算任务,图包括数据(Data)、流(Flow)、图(Graph)
  • 图中节点称为op,一个op获得多个Tensor
  • Tensor为张量,TF中用到的数据都是Tensor
  • 图必须在会话中启动

示例

计算两个矩阵的乘积,


x = tf.constant([[1.0,2.0,3.0],[1.0,2.0,3.0],[1.0,2.0,3.0]])
y = tf.constant([[0,0,1.0],[0,0,1.0],[0,0,1.0]])
z = tf.matmul(x3,y3) # Session激活z,得到计算结果
with tf.Session() as sess:
print(sess.run(z))

2、Tensor类型

(1)常量

值不可变

constant(
value,(数值)
dtype=None,(数据类型)
shape=None,(指定形状)
name='Const',(命名)
verify_shape=False()
)

代码


x = tf.constant([[1.0,2.0,3.0],[1.0,2.0,3.0],[1.0,2.0,3.0]],dtype=tf.float32,shape=[3,3],name='x') # 简写
x = tf.constant([[1.0,2.0,3.0],[1.0,2.0,3.0],[1.0,2.0,3.0]])

(2)变量

代码


v2=tf.Variable(tf.constant(2),name='x')

(3)占位符

定义过程,执行时赋值

placeholder(
value,(数值)
dtype=None,(数据类型)
shape=None,(指定形状)
)

代码


x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)
z = tf.multiply(x, y) with tf.Session() as sess:
print(sess.run(z, feed_dict={x:[1.0] , y: [2.0]}))

(4)平均值

计算张量的各个维度上的元素的平均值。

reduce_mean(
input_tensor,
axis=None,
keep_dims=False,
name=None,
reduction_indices=None
)

代码


x = tf.constant([[1.0,2.0],[3.0,4.0]],dtype=tf.float32,shape=[2,2])
tf.reduce_mean(x) ==> 2.5
tf.reduce_mean(x, 0) ==> [2. 3.]
tf.reduce_mean(x, 1) ==> [1.5 3.5]

(5) 优化器

tf.train.GradientDescentOptimizer 是实现梯度下降算法的优化器。

机器学习、深度学习概念

1、代价函数

整个训练集上所有样本误差的平均。

2、目标函数

经过优化后,期望获得的函数。

3、激活函数

负责将神经元的输入映射到输出端。增加神经网络模型的非线性

激活函数几种常见类型:

  • sigmod函数

\[f(x) = \frac 1 {1+e^{-1}}
\]

  • tanh函数

\[f(x) = \frac {e^x-e^{-x}} {e^x+e^{-x}}
\]

  • Relu函数

\[f(x)= \begin{cases} 0 &x \le 0 \\\\ x &x>0 \end{cases}
\]

4、学习率

学习率决定参数移动到最优值速度快慢。学习率过大,会越过最优值。学习率过小,优化效率低

5、前向传播(Forward Propagation)

第n层神经元的值决定第n+1层神经元的值。

6、反向传播(Back Propagation)

通过前向传播获取到的结果。为减少误差,进行反向求偏导数,修正参数,再进行前向传播,一直迭代,直到训练获得最小的误差。

代码实现


import numpy as np
import tensorflow as tf # 训练样本占位
data = tf.placeholder(tf.float32, shape=(4, 2))
label = tf.placeholder(tf.float32, shape=(4, 1)) with tf.variable_scope('layer1') as scope:
# 权重
weight = tf.get_variable(name='weight', shape=(2, 2))
# 偏置项
bias = tf.get_variable(name='bias', shape=(2,))
x = tf.nn.sigmoid(tf.matmul(data, weight) + bias) with tf.variable_scope('layer2') as scope:
weight = tf.get_variable(name='weight', shape=(2, 1))
bias = tf.get_variable(name='bias', shape=(1,))
x = tf.matmul(x, weight) + bias # 激活函数
preds = tf.nn.sigmoid(x) # 损失函数
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=label, logits=x)) # 学习率占位
learning_rate = tf.placeholder(tf.float32) # 梯度下降优化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss) # 训练样本
train_data = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
train_label = np.array([[0], [1], [1], [0]]) # 执行
with tf.Session() as sess: # 初始化变量
sess.run(tf.global_variables_initializer()) for step in range(10000):
if step < 3000:
lr = 1
elif step < 6000:
lr = 0.1
else:
lr = 0.01
_, l, pred = sess.run([optimizer, loss, preds], feed_dict={data: train_data, label: train_label, learning_rate: lr})
if step % 500:
print('Step: {} -> Loss: {} -> Predictions: {}'.format(step, l, pred))

TensorBoard与计算图可视化

TensorBoard是一个可视化工具,能够有效地展示Tensorflow在运行过程中的计算图、各种指标随着时间的变化趋势以及训练中使用到的数据信息。

代码

writer = tf.summary.FileWriter('graphs',tf.get_default_graph())
writer.close()

打开图,输入命令

zhijiefang@fangzhijie-PC:~/test$ tensorboard --logdir=graphs
TensorBoard 1.11.0 at http://fangzhijie-PC:6006 (Press CTRL+C to quit)

计算图显示

运行结果


... Step: 9993 -> Loss: 0.3484194874763489 -> Predictions: [[0.00179099]
[0.49935436]
[0.9978059 ]
[0.50105 ]]
Step: 9994 -> Loss: 0.3484194874763489 -> Predictions: [[0.00179098]
[0.49935436]
[0.9978059 ]
[0.50105 ]]
Step: 9995 -> Loss: 0.3484194874763489 -> Predictions: [[0.00179098]
[0.49935436]
[0.9978059 ]
[0.50105 ]]
Step: 9996 -> Loss: 0.3484194874763489 -> Predictions: [[0.00179097]
[0.49935436]
[0.9978059 ]
[0.50105 ]]
Step: 9997 -> Loss: 0.3484194576740265 -> Predictions: [[0.00179096]
[0.49935436]
[0.9978059 ]
[0.50105 ]]
Step: 9998 -> Loss: 0.3484194278717041 -> Predictions: [[0.00179096]
[0.49935436]
[0.9978059 ]
[0.50105 ]]
Step: 9999 -> Loss: 0.3484194278717041 -> Predictions: [[0.00179095]
[0.49935436]
[0.9978059 ]
[0.50104994]]

TensorFlow实现XOR的更多相关文章

  1. 【深度学习与TensorFlow 2.0】入门篇

    注:因为毕业论文需要用到相关知识,借着 TF 2.0 发布的时机,重新捡起深度学习.在此,也推荐一下优达学城与 TensorFlow 合作发布的TF 2.0入门课程,下面的例子就来自该课程. 原文发布 ...

  2. Reading | 《TensorFlow:实战Google深度学习框架》

    目录 三.TensorFlow入门 1. TensorFlow计算模型--计算图 I. 计算图的概念 II. 计算图的使用 2.TensorFlow数据类型--张量 I. 张量的概念 II. 张量的使 ...

  3. TensorFlow API 汉化

    TensorFlow API 汉化 模块:tf   定义于tensorflow/__init__.py. 将所有公共TensorFlow接口引入此模块. 模块 app module:通用入口点脚本. ...

  4. tensorflow学习笔记——自编码器及多层感知器

    1,自编码器简介 传统机器学习任务很大程度上依赖于好的特征工程,比如对数值型,日期时间型,种类型等特征的提取.特征工程往往是非常耗时耗力的,在图像,语音和视频中提取到有效的特征就更难了,工程师必须在这 ...

  5. 李宏毅 Tensorflow解决Fizz Buzz问题

    提出问题 一个网友的博客,记录他在一次面试时,碰到面试官要求他在白板上用TensorFlow写一个简单的网络实现异或(XOR)功能.这个本身并不难,单层感知器不能解决异或问题是学习神经网络中的一个常识 ...

  6. TensorFlow学习笔记7-深度前馈网络(多层感知机)

    深度前馈网络(前馈神经网络,多层感知机) 神经网络基本概念 前馈神经网络在模型输出和模型本身之间没有反馈连接;前馈神经网络包含反馈连接时,称为循环神经网络. 前馈神经网络用有向无环图表示. 设三个函数 ...

  7. Tensorflow 官方版教程中文版

    2015年11月9日,Google发布人工智能系统TensorFlow并宣布开源,同日,极客学院组织在线TensorFlow中文文档翻译.一个月后,30章文档全部翻译校对完成,上线并提供电子书下载,该 ...

  8. [LeetCode] Maximum XOR of Two Numbers in an Array 数组中异或值最大的两个数字

    Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai < 231. Find the maximum re ...

  9. tensorflow学习笔记二:入门基础

    TensorFlow用张量这种数据结构来表示所有的数据.用一阶张量来表示向量,如:v = [1.2, 2.3, 3.5] ,如二阶张量表示矩阵,如:m = [[1, 2, 3], [4, 5, 6], ...

随机推荐

  1. Python基础语法 系统学习

    Python 中的基础语法最大的特点就是优雅和简洁.入门学习Python的难度相比较其他语言也比较小. 我个人比较推荐以下三个学习方式(根据个人情况和喜好,可选择任意一个): 1.  菜鸟在线:出品的 ...

  2. 手游热更新方案--Unity3D下的CsToLua技术

    WeTest 导读 CsToLua工具将客户端 C#源码自动转换为Lua,实现热更新,本文以麻将项目为例介绍客户端技术细节. 麻将项目架构 其中ChinaMahjong-CSLua为C#工程,实现麻将 ...

  3. spss汉化详解

    今天写一下关于SPSS的汉化以及激活码 下载spss: 安装过程比较简单,主要就是激活码: 9DNCAF2O3QVDV7FBIO696OO6GWLNXZPPRYTPWF2PPX7C8T6Y24LMVV ...

  4. Django基础三(form和template)

    上一篇博文学习了Django的View和urls,接下来是对django form 和 template的学习. 1 django form django form为我们提供了便捷的方式来创建一些HT ...

  5. C# Vista Command Link Control with Windows Forms

    using System; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; u ...

  6. 每日分享!JavaScript的鼠标事件(11个事件)

    鼠标的11个事件 具体的事件解释如下: click:按下鼠标(通常是按下主按钮)时触发. dblclick:在同一个元素上双击鼠标时触发. mousedown:按下鼠标键时触发. mouseup:释放 ...

  7. Vue.js-08:第八章 - 组件的基础知识

    一.前言 在之前的学习中,我们对于 Vue 的一些基础语法进行了简单的了解,通过之前的代码可以清晰的看出,我们在使用 Vue 的整个过程,最终都是在对 Vue 实例进行的一系列操作. 这里就会引出一个 ...

  8. 我不是bug神(JVM问题排查)

    Story background 回望2018年12月,这也许是程序员们日夜不得安宁的日子,皆因各种前线的系统使用者都需要冲业绩等原因,往往在这个时候会向系统同时写入海量的数据,当我们的应用或者数据库 ...

  9. c#批量抓取免费代理并验证有效性

    之前看到某公司的官网的文章的浏览量刷新一次网页就会增加一次,给人的感觉不太好,一个公司的官网给人如此直白的漏洞,我批量发起请求的时候发现页面打开都报错,100多人的公司的官网文章刷新一次你给我看这个, ...

  10. Java:基于MD5的文件监听程序

    前述和需求说明 和之前写的 Python:基于MD5的文件监听程序 是同样的功能,就不啰嗦了,就是又写了一个java版本的,可以移步 python 版本去看一下,整个的核心思路是一样的.代码已上传Gi ...