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、激活函数

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

4、学习率

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

5、前向传播(Forward Propagation)

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

三、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)

计算图显示

image.png

四、代码实现

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))

五、运行结果

 ...

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]]

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

AI-Master

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏贾志刚-OpenCV学堂

使用tensorflow layers相关API快速构建卷积神经网络

tf.layers包中包含了CNN卷积神经网络的大多数层类型,当前封装支持的层包括:

21030
来自专栏文武兼修ing——机器学习与IC设计

使用numpy构建多层感知机目标其他组件网络训练与测试

import numpy as np 目标 使用numpy实现多层感知机的正向和反向传播 层次构建 全连接层 正向传播 正向传播的公式为:$Y = f(W \t...

388110
来自专栏PaddlePaddle

【序列到序列学习】使用Scheduled Sampling改善翻译质量

生成古诗词 序列到序列学习实现两个甚至是多个不定长模型之间的映射,有着广泛的应用,包括:机器翻译、智能对话与问答、广告创意语料生成、自动编码(如金融画像编码)...

1.4K50
来自专栏数据科学与人工智能

【Python环境】使用 scikit-learn 进行机器学习的简介

概要: 该章节,我们将介绍贯穿scikit-learn使用中的“机器学习(Machine Learning)”这个词汇,并给出一些简单的学习示例。 一、机器学习...

313100
来自专栏杂七杂八

numpy中的乘法(*,dot)

numpy中数据表示有数组和矩阵两种数据类型,他们的乘法计算也是多种形式,下面我们主要来说一下numpy中的乘法计算 numpy.ndarray 运算符 ...

29960
来自专栏null的专栏

简单易学的机器学习算法——Rosenblatt感知机的对偶解法

一、Rosenblatt感知机回顾    image.png 二、Rosenblatt感知机的对偶形式    image.png 三、算法流程 image....

40150
来自专栏数值分析与有限元编程

可视化 | MATLAB划分均匀三角形网格

划分单元网格是随心所欲的,所遵循的原则就是尽量提高计算精度。下面是一个规则区域划分均匀三角形网格的例子。 如图所示,将一个矩形平面区域划分成相同大小的直角三角形...

44240
来自专栏华章科技

三天速成!香港科技大学TensorFlow课件分享

该教程第一天先介绍了深度学习和机器学习的潜力与基本概念,而后便开始探讨深度学习框架 TensorFlow。首先我们将学到如何安装 TensorFlow,其实我们...

14120
来自专栏懒人开发

(10.4)James Stewart Calculus 5th Edition:Areas and Lengths in Polar Coordinates

极坐标系中的面积和长度 (这里看见 Coordinates ,就想到了 CoordiateLayout _ ) 我们简单要求一个圆的部分面积

12220
来自专栏书山有路勤为径

Batch Normalization怎么加入batch normalization

Batch Normalization 会使你的参数搜索问题变得很容易,使神经网络对超参数的选择更加稳定,超参数的范围会更加庞大,工作效果也很好,也会使你的训练...

10320

扫码关注云+社区

领取腾讯云代金券