深度学习之tensorflow (一) XORerr1 -修改

博客背景是学习《深度学习之TensorFlow》这本书籍中的作业,修改第七章的作业,把XOR-异或的错误代码修改为正确的。

主要修改有三个地方:

  1. 隐藏层一的运算从sigmoid修改为add运算;
  2. 输出层的运算修改为sigmoid(原来是什么运算忘记了。。);
  3. 将优化算法从GradientDescentOptimizer修改为牛逼的Adam算法;
# -*- coding: utf-8 -*-
"""
"""
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plttf.reset_default_graph()
tf.set_random_seed(55)
np.random.seed(55)learning_rate = 0.01
input_data = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]]  # XOR input
output_data = [[0.], [1.], [1.], [0.]]  # XOR output
hidden_nodes = 10  #代表该网络层的神经元个数
n_input = tf.placeholder(tf.float32, shape=[None, 2], name="n_input")
n_output = tf.placeholder(tf.float32, shape=[None, 1], name="n_output")
# hidden layer's bias neuron
b_hidden = tf.Variable(0.1, name="hidden_bias")  
W_hidden = tf.Variable(tf.random_normal([2, hidden_nodes]), name="hidden_weights")
"""修改sigmoid为add运算"""
hidden = tf.add(tf.matmul(n_input, W_hidden) ,b_hidden)
hidden1 = tf.nn.relu(hidden)
################
# output layer #
################
W_output = tf.Variable(tf.random_normal([hidden_nodes, 1]), name="output_weights")  # output layer's 
b_output =  tf.Variable(0.1, name="output_bias")##output = tf.nn.relu(tf.matmul(hidden, W_output)+b_output)  # 出来的都是nan calc output layer's 
#softmax
y = tf.matmul(hidden1, W_output)+b_output
"""修改sigmoid运算"""
output = tf.nn.sigmoid(y)
#交叉熵
loss = -(n_output * tf.log(output) + (1 - n_output) * tf.log(1 - output))#optimizer = tf.train.GradientDescentOptimizer(0.01)
"""修改为Adam的优化器"""
optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate)
train = optimizer.minimize(loss)  # let the optimizer train#####################
# train the network #
#####################
with tf.Session() as sess:sess.run(tf.global_variables_initializer())for epoch in range(0, 2001):  # run the training operationcvalues = sess.run([train, loss, W_hidden, b_hidden, W_output],feed_dict={n_input: input_data, n_output: output_data})# print some debug stuffif epoch % 200 == 0:print("")print("step: {:>3}".format(epoch))print("loss: {}".format(cvalues[1]))#print(W_hidden.value())# print("b_hidden: {}".format(cvalues[3]))# print("W_hidden: {}".format(cvalues[2]))# print("W_output: {}".format(cvalues[4]))print("")for i in range(len(input_data)):print("input: {} | output: {}".format(input_data[i], sess.run(output, feed_dict={n_input: [input_data[i]]})))

备注:理论知识还是薄弱啊,花了一天的时间来修改该error

顺便把7-10和7-11的源码修改了

7-10修改部分:

隐藏层的神经元个数更改为10个(经测试只要大于2即可)

hidden_nodes = 10

将输出层的激活函数更改为sigmoid即可:

"""将激活函数修改sigmoid即可"""
output = tf.nn.sigmoid(y)

7-11修改部分:

隐藏层的神经元个数更改为10个(经测试只要大于2即可)

hidden_nodes = 10

""""修改损失函数为均值平方差"""

#cross_entropy = -tf.reduce_mean(n_output * tf.log(output))# 
cross_entropy = tf.square(n_output-output)

总结:(个人理解,不对请回复)

  1. 神经网络的层里面的神经元个数要大于输入的维度,以本文解决异或问题,二维的输入,那么针对单层隐藏层来说,其神经元个数大于二才有效;
  2. 激活函数的选择。该处主要体现在7-10的代码修改上,“Relu”与“Sigmiod”相比容易陷入局部最优解,所以选择合适的激活函数尤其重要,这部分理解还不太透彻,主要是看书的结论得知的,具体是为什么再作深入理解;此处看到有博客说“relu和softmax两层不要连着用,最好将relu改成tanh”尚未理解,正在证明其真实性。
  3. 损失函数。损失函数也很重要,以7-11的代码修改为例,损失函数尽可能选择已知的比较常用合理的函数,比如均值平方差和交叉熵等。
  4. 梯度下降的函数,即优化函数“optimizer”的选择。常用的有BGD、SGD等,其实就是根据每次计算损失函数所需的训练样本数量来划分的。为克服BGD和SGD的缺点,一般是使用小批量的数据进行损失函数更新,即降低了随机性又提高了训练效率。TF中常用的梯度下降函数有七种,但比较牛逼的"Adam"优化函数,高效解决优化问题(具体的内容会另写一篇博客介绍)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可调用对象

# -*- coding: utf-8 -*- #python 27 #xiaodeng #可调用对象 #http://www.cnpythoner.com/post/306.html#定义: #许多python对象都是可调用的,即:任何通过函数操作符()来调用的对象。 #callable()是一个布尔函数,确定一个对象是否…

Ansys ——自定义不规则形状梁截面

目录 导读: 1、问题描述 2.CAD绘制截面,导出.sat文件格式 (1)在三维建模工作空间下绘制截面

Language-Directed Hardware Design for Network Performance Monitoring——Marple

网络监控困难 1、仅仅通过去增加特定的监控功能到交换机是不能满足运营商不断变化的需求的。(交换机需要支持网络性能问题的表达语言)2、他们缺乏对网络深处的性能问题进行本地化的可见性,间接推断网络问题的原因3、当前的交换机监控并没有提…

深度学习基础(四)优化函数(梯度下降函数)

梯度下降函数也就是优化函数,在神经网络训练过程最重要的函数。重要程度类似于调校对于汽车的重要性,搭建模型和参数设置等操作“造好了一辆汽车”,优化函数“调校”。因为汽车最终的操控性和加速性能等指标很大程度取决于调校,调…

ANSYS 简支梁的约束

在ansys中,梁的定义都是通过梁截面和轴线进行定义的,不同的梁的区别在ansys中的体现仅在于约束的处理上不同 1.简支梁的约束 假设简支梁的梁轴线是x轴,可以绕z轴弯曲,则简支梁的约束: 起始点:X、Y、Z、RO…

js 实现 复制 功能 (zeroclipboard)

#复制功能因访问权限和安全问题, 被浏览器禁了# 我要实现的功能:点击复制按钮,复制浏览器的当前页面地址,加上用户选择的参数(用户查找过滤),直接将该链接发给别人,点击打开就是对应…

解决 kindle 书籍字体颜色偏淡问题的方法

现象 通过Markdown转换而来的mobi格式书籍都有一个大问题:字体偏淡,放在kindle上看对比度很差。 原因分析: 导致这种问题的原因,可能是因为在制作电子书的过程中,这些内容是被标注了彩色或灰色。这可能更适合全彩屏幕的…

车智汇模式系统技术开发数据

用户思维:对经营者和消费者的理解,以用户为中心,学会换位思考,发掘用户的真正想法和需求。以前是生产什么就卖什么(自己制作卖点),现在是了解用户需要什么才做什么(实现卖点)。车智汇是一款以"云平台智能终端&quo…

深度学习基础(二)激活函数

激活函数(也被称为激励函数)的意义就是加入非线性因素,使得神经网络具有非线性表达的能力。其必要条件是激活函数的输入和输出都是可微的,因为神经网络要求处处可微。(可微是指函数的各个方向可导,可微大于等于可导) …

ANSYS——固定斜度的变截面变截面的定义、自由耦合和变截面的定义

目录 1.变截面梁 2.自由度耦合 3.变截面的ANSYS GUI操作 4.疑问 以下两个定义转自:http://wenku.baidu.com/view/04e43ebbfd0a79563c1e722d.html 上述文章中还包含了一个实例,可以参考

Please ensure that adb is correctly located at……问题解决方案

启动android模拟器时.有时会报The connection to adb is down, and a severe error has occured.的错误.在网友说在任务管理器上把所有adb.exe关闭掉.重启eclipse.但试过不管用.所以在外国网站上找到一种可行的方法:1.先把eclipse关闭.2.在管理器转到你的android SDK 的platfor…

2016.8.23

1 贴吧里看到一个关于因为游戏闹翻的故事,大致情况是这样的:某女初中的时候有个闺蜜。后来此人因为抑郁之类的精神问题被送到医院,这让女主很苦闷且脆弱又孤单,这时候她的闺蜜去医院看望她,然后女主就喜欢上了这位闺蜜…

[Spring]01_环境配置

1.1 Spring jar包下载 (1)进入官网http://repo.spring.io (2)在资源库界面点击Artifacts标签,然后点击libs-release-local,展开后依次点击org -> springframework -> spring。 然后,就可…

ANSYS——常见梁的后处理方法(弯曲应力、弯矩、轴力等的显示)

目录 a. 显示变形 b. 显示当量应力 c. 显示弯曲应力 d. 支反力显示 e. 将图形存入文件

深度学习基础(三)loss函数

loss函数,即损失函数,是决定网络学习质量的关键。若网络结构不变的前提下,损失函数选择不当会导致模型精度差等后果。若有错误,敬请指正,Thank you! 目录 一、loss函数定义 二、常见的loss算法种类 1.M…

C#中DataTable中的Compute方法使用收集

Compute函数的参数就两个:Expression,和Filter。 Expresstion是计算表达式,关于Expression的详细内容请看这里“http://msdn2.microsoft.com/zh-cn/library/system.data.datacolumn.expression(VS.80).aspx”。而Filter则是条件过滤器&#x…

Lazy延迟实例对象

懒对象,实现延迟实例对象。 转载于:https://www.cnblogs.com/yj2010/p/5798622.html

Shift键关闭大小写

同事说他的大写开了之后无法关闭,我检查了下,的确是,非常奇怪,然后我不小心按了下下面的Shift键,大写指示灯灭了,我立即明白是怎么回事,原来是文字和语言设置里的Key setting改了,如…

ANSYS——如何选择合适的单元类型

目录 1.该选杆单元(Link)还是梁单元(Beam)? 2.对于薄壁结构,是选实体单元还是壳单元?

深度学习之pytorch(一) 环境安装

快2周没更新博客了,别问为什么!我才不会告诉你忙的飞起!说心里话,个人更喜欢用tensorflow来做深度学习! 一、环境配置 1.win10 64位系统; 2.anaconda3; 3.不管是CPU还是GPU具有(…