TensorFlow实现XOR
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函数
\]
- tanh函数
\]
- Relu函数
\]
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的更多相关文章
- 【深度学习与TensorFlow 2.0】入门篇
注:因为毕业论文需要用到相关知识,借着 TF 2.0 发布的时机,重新捡起深度学习.在此,也推荐一下优达学城与 TensorFlow 合作发布的TF 2.0入门课程,下面的例子就来自该课程. 原文发布 ...
- Reading | 《TensorFlow:实战Google深度学习框架》
目录 三.TensorFlow入门 1. TensorFlow计算模型--计算图 I. 计算图的概念 II. 计算图的使用 2.TensorFlow数据类型--张量 I. 张量的概念 II. 张量的使 ...
- TensorFlow API 汉化
TensorFlow API 汉化 模块:tf 定义于tensorflow/__init__.py. 将所有公共TensorFlow接口引入此模块. 模块 app module:通用入口点脚本. ...
- tensorflow学习笔记——自编码器及多层感知器
1,自编码器简介 传统机器学习任务很大程度上依赖于好的特征工程,比如对数值型,日期时间型,种类型等特征的提取.特征工程往往是非常耗时耗力的,在图像,语音和视频中提取到有效的特征就更难了,工程师必须在这 ...
- 李宏毅 Tensorflow解决Fizz Buzz问题
提出问题 一个网友的博客,记录他在一次面试时,碰到面试官要求他在白板上用TensorFlow写一个简单的网络实现异或(XOR)功能.这个本身并不难,单层感知器不能解决异或问题是学习神经网络中的一个常识 ...
- TensorFlow学习笔记7-深度前馈网络(多层感知机)
深度前馈网络(前馈神经网络,多层感知机) 神经网络基本概念 前馈神经网络在模型输出和模型本身之间没有反馈连接;前馈神经网络包含反馈连接时,称为循环神经网络. 前馈神经网络用有向无环图表示. 设三个函数 ...
- Tensorflow 官方版教程中文版
2015年11月9日,Google发布人工智能系统TensorFlow并宣布开源,同日,极客学院组织在线TensorFlow中文文档翻译.一个月后,30章文档全部翻译校对完成,上线并提供电子书下载,该 ...
- [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 ...
- tensorflow学习笔记二:入门基础
TensorFlow用张量这种数据结构来表示所有的数据.用一阶张量来表示向量,如:v = [1.2, 2.3, 3.5] ,如二阶张量表示矩阵,如:m = [[1, 2, 3], [4, 5, 6], ...
随机推荐
- HTML标题
HTML 标题 在 HTML 文档中,标题很重要. HTML 标题 标题(Heading)是通过 <h1> - <h6> 标签进行定义的. <h1> 定义最大的标题 ...
- 深入浅出Git教程(转载)
目录 一.版本控制概要 1.1.什么是版本控制 1.2.常用术语 1.3.常见的版本控制器 1.4.版本控制分类 1.4.1.本地版本控制 1.4.2.集中版本控制 1.4.3.分布式版本控制 1.5 ...
- CSS3实例分享之多重背景的实现(Multiple backgrounds)
CSS3的诞生为我们解决了这一问题,在CSS3里,通过background-image或者background可以为一个容器设置多张背景图像,也就是说可以把不同背景图象只放到一个块元素里. 首先我们来 ...
- git解析日志常用命令
git diff --name-only ORIG_HEAD 获取变更列表 git log -p 查看每个提交引入的实际更改. git log --oneline --decorate 查看日志列表 ...
- 了解Scala 宏
前情回顾 了解Scala反射介绍了反射的基本概念以及运行时反射的用法, 同时简单的介绍了一下编译原理知识, 其中我感觉最为绕的地方, 就属泛型的几种使用方式了. 而最抽象的概念, 就是对于符号和抽象树 ...
- mybatis入门系列三之类型转换器
mybatis入门系列三之类型转换器 类型转换器介绍 mybatis作为一个ORM框架,要求java中的对象与数据库中的表记录应该对应 因此java类名-数据库表名,java类属性名-数据库表字段名, ...
- go语言调度器源代码情景分析之四:函数调用栈
本文是<go调度器源代码情景分析>系列 第一章 预备知识的第3小节. 什么是栈 栈是一种“后进先出”的数据结构,它相当于一个容器,当需要往容器里面添加元素时只能放在最上面的一个元素之上,需 ...
- Spring中的@conditional注解
今天主要从以下几方面来介绍一下@Conditional注解 @Conditional注解是什么 @Conditional注解怎么使用 1,@Conditional注解是什么 @Conditional注 ...
- PHP中反射的简单实用(动态代理)
<?php class mysql{ function connect($db){ echo "连接mysql数据库${db[0]} \r\n"; } } class ora ...
- js数组中的find(), findIndex(), filter(), forEach(), some(), every(), map(), reduce()方法的详解和应用实例
1. find()与findIndex() find()方法,用于找出第一个符合条件的数组成员.它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该 ...