博客背景是学习《深度学习之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"优化函数,高效解决优化问题(具体的内容会另写一篇博客介绍)。

深度学习之tensorflow (一) XORerr1 -修改相关推荐

  1. TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络

    TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络 转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnote ...

  2. DL框架之Tensorflow:深度学习框架Tensorflow的简介、安装、使用方法之详细攻略

    DL框架之Tensorflow:深度学习框架Tensorflow的简介.安装.使用方法之详细攻略 目录 Tensorflow的简介 1.描述 2.TensorFlow的六大特征 3.了解Tensorf ...

  3. [深度学习] 分布式Tensorflow 2.0 介绍(二)

    [深度学习] 分布式模式介绍(一) [深度学习] 分布式Tensorflow 2.0介绍(二) [深度学习] 分布式Pytorch 1.0介绍(三) [深度学习] 分布式Horovod介绍(四) 一 ...

  4. [GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(中)

    上一篇文章–[GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(上)中,我们先介绍了对于图像修复的背景,需要利用什么信息来对缺失的区域进行修复,以及将图像当做概率分布采样的样本来看 ...

  5. 快速了解深度学习框架--tensorflow(更新中)

    深度学习框架(工具)简单来说即库,需要import,比如tensorflow,Caffe- 深度学习框架提供了一系列的深度学习的组件(对于通用的算法,里面会有实现),当需要使用新的算法的时候就需要用户 ...

  6. 深度学习(TensorFlow)环境搭建:(二)Ubuntu16.04+1080Ti显卡驱动

    前几天把刚拿到了2台GPU机器组装好了,也写了篇硬件配置清单的文章--<深度学习(TensorFlow)环境搭建:(一)硬件选购和主机组装>.这两台也在安装Ubuntu 16.04和108 ...

  7. 深度学习与TensorFlow

    深度学习与TensorFlow DNN(深度神经网络算法)现在是AI社区的流行词.最近,DNN 在许多数据科学竞赛/Kaggle 竞赛中获得了多次冠军. 自从 1962 年 Rosenblat 提出感 ...

  8. 深度学习调用TensorFlow、PyTorch等框架

    深度学习调用TensorFlow.PyTorch等框架 一.开发目标目标 提供统一接口的库,它可以从C++和Python中的多个框架中运行深度学习模型.欧米诺使研究人员能够在自己选择的框架内轻松建立模 ...

  9. 在浏览器中进行深度学习:TensorFlow.js (四)用基本模型对MNIST数据进行识别

    2019独角兽企业重金招聘Python工程师标准>>> 在了解了TensorflowJS的一些基本模型的后,大家会问,这究竟有什么用呢?我们就用深度学习中被广泛使用的MINST数据集 ...

最新文章

  1. HD-ACM算法专攻系列(3)——Least Common Multiple
  2. c# 读取机器CPU信息,硬盘信息,网卡信息
  3. 使用HTML5实现刮刮卡效果
  4. json转string示例_C.示例中的String.Insert()方法
  5. KVM 虚拟机 调整内存与CPU
  6. 阿里云+wordpress搭建个人网站及博客
  7. python mount回调函数_python requests模块中返回时间elapsed解析
  8. 检查图层当中是否存在高程基准(C++)ArcObject
  9. UIImageView contentModel
  10. 2021-09-13 QCC3003 回连
  11. 500 G JAVA视频网盘分享(JEECG开源社区)
  12. 51单片机串口通信的程序实现与Proteus仿真
  13. java基金管理系统,基于JSP(java)基金管理系统的设计和实现 - 图文
  14. 人工智能行业源代码防数据防泄密需求分析
  15. 笨鸟Linux学习连载之 - 万事开头难
  16. 2022年江西省中职组“网络空间安全”赛项模块A解析
  17. NasNet实践:图像识别领域最佳模型
  18. 怎么更改图片的尺寸?照片尺寸大小怎么改?
  19. js 把对象转为字符串,并以逗号隔开
  20. 超好用的纯C语言矩阵运算库

热门文章

  1. 使用CImage双缓冲
  2. WSS3.0自带数据库可以使用SQL 2005 Server Management Studio来管理
  3. System.Data.OleDb.OleDbException: INSERT INTO 语句的语法错误
  4. 洛谷1091合唱队形
  5. NoSQL-MongoDB with python
  6. .NET 跨平台服务端资料
  7. HDU - 1723 - Distribute Message
  8. IsNull 和 SQL语句中CASE WHEN用法
  9. koa --- 监听路由,并使用模板引擎渲染显示
  10. node --- 一个很好用的包json-server