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], ...
随机推荐
- Java Servlet 2.5 设置 cookie httponly
Servlet 3.0 有 cookie.setHttpOnly(true); 多么人性化, Servlet 2.5 是没有这个方法的要这个曲线救国:cookie.setPath("; Ht ...
- Hadoop配置第1节-集群网络配置
Hadoop-集群网络配置 总体目标:完成zookeeper+Hadoop+Hbase 整合平台搭建 进度:1:集群网络属性配置2:集群免密码登陆配置3:JDK的安装4:Zookeeper的安装5 ...
- Docker 服务
1. Docker服务 作为一名后端攻城狮,对“服务”这个概念一定不陌生.比如,我们做一个会员系统,它可能会需要数据库.缓存.消息队列,这些都是中间件服务,除此以外可能还需要依赖其它的Dubbo服务 ...
- 分布式团队中沟通引发的问题, itest 解决之道
导读: 从问题场景和 itest 优雅解决办法及示例2部分来阐述 1.问题场景: 研发团队是分散在几地的分布式团队,经常会因沟通引来一些问题.如下三图是开发觉得测试进度太慢,一番对话之后, 接下来他们 ...
- Redis持久化方式的选择
本文将介绍Redis持久化的两种方式:快照持久化和AOF持久化,并对两种方法进行分析和对比,方便在实际中做出选择. 持久化 什么是持久化 Redis所有数据保存在内存中,对数据的更新将异步地保存到磁盘 ...
- Python练习:哥德巴赫猜想
哥德巴赫猜想 哥德巴赫 1742 年给欧拉的信中哥德巴赫提出了以下猜想:任一大于 2 的偶数都可写成两个质数之和.但是哥德巴赫自己无法证明它,于是就写信请教赫赫有名的大数学家欧拉帮忙证明,但是一直到死 ...
- 【JVM虚拟机】(8)--深入理解Class中--方法、属性表集合
#[JVM虚拟机](8)--深入理解Class中--方法.属性表集合 之前有关class文件已经写了两篇博客: 1.[JVM虚拟机](5)---深入理解JVM-Class中常量池 2.[JVM虚拟机] ...
- vue项目使用websocket技术
一.为什么需要websocket? 前端和后端的交互模式最常见的就是前端发数据请求,从后端拿到数据后展示到页面中.如果前端不做操作,后端不能主动向前端推送数据,这也是http协议的缺陷. 因此,一种新 ...
- 马蜂窝搜索基于 Golang 并发代理的一次架构升级
搜索业务是马蜂窝流量分发的重要入口.很多用户在使用马蜂窝时,都会有目的性地主动搜索与自己旅行需求相关的各种信息,衣食住行,事无巨细,从而做出最符合需求的旅行决策. 因此在马蜂窝,搜索业务交互的下游模块 ...
- 【干货分享】可能是东半球最全的.NET Core跨平台微服务学习资源
如果你发现还有西半球的资源,烦请相告,不胜感谢! 一..NET Core基础 微软英文官网 .NET Core 微软中文官网 GitHub 用ASP.NET内核和Azure构建现代Web应用程序 博客 ...