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

主要修改有三个地方:

  1. 隐藏层一的运算从sigmoid修改为add运算;
  2. 输出层的运算修改为sigmoid(原来是什么运算忘记了。。);
  3. 将优化算法从GradientDescentOptimizer修改为牛逼的Adam算法;
  1. # -*- coding: utf-8 -*-
  2. """
  3. """
  4. import tensorflow as tf
  5. import numpy as np
  6. import matplotlib.pyplot as plt
  7. tf.reset_default_graph()
  8. tf.set_random_seed(55)
  9. np.random.seed(55)
  10. learning_rate = 0.01
  11. input_data = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]] # XOR input
  12. output_data = [[0.], [1.], [1.], [0.]] # XOR output
  13. hidden_nodes = 10 #代表该网络层的神经元个数
  14. n_input = tf.placeholder(tf.float32, shape=[None, 2], name="n_input")
  15. n_output = tf.placeholder(tf.float32, shape=[None, 1], name="n_output")
  16. # hidden layer's bias neuron
  17. b_hidden = tf.Variable(0.1, name="hidden_bias")
  18. W_hidden = tf.Variable(tf.random_normal([2, hidden_nodes]), name="hidden_weights")
  19. """修改sigmoid为add运算"""
  20. hidden = tf.add(tf.matmul(n_input, W_hidden) ,b_hidden)
  21. hidden1 = tf.nn.relu(hidden)
  22. ################
  23. # output layer #
  24. ################
  25. W_output = tf.Variable(tf.random_normal([hidden_nodes, 1]), name="output_weights") # output layer's
  26. b_output = tf.Variable(0.1, name="output_bias")#
  27. #output = tf.nn.relu(tf.matmul(hidden, W_output)+b_output) # 出来的都是nan calc output layer's
  28. #softmax
  29. y = tf.matmul(hidden1, W_output)+b_output
  30. """修改sigmoid运算"""
  31. output = tf.nn.sigmoid(y)
  32. #交叉熵
  33. loss = -(n_output * tf.log(output) + (1 - n_output) * tf.log(1 - output))
  34. #optimizer = tf.train.GradientDescentOptimizer(0.01)
  35. """修改为Adam的优化器"""
  36. optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate)
  37. train = optimizer.minimize(loss) # let the optimizer train
  38. #####################
  39. # train the network #
  40. #####################
  41. with tf.Session() as sess:
  42. sess.run(tf.global_variables_initializer())
  43. for epoch in range(0, 2001):
  44. # run the training operation
  45. cvalues = sess.run([train, loss, W_hidden, b_hidden, W_output],
  46. feed_dict={n_input: input_data, n_output: output_data})
  47. # print some debug stuff
  48. if epoch % 200 == 0:
  49. print("")
  50. print("step: {:>3}".format(epoch))
  51. print("loss: {}".format(cvalues[1]))
  52. #print(W_hidden.value())
  53. # print("b_hidden: {}".format(cvalues[3]))
  54. # print("W_hidden: {}".format(cvalues[2]))
  55. # print("W_output: {}".format(cvalues[4]))
  56. print("")
  57. for i in range(len(input_data)):
  58. 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即可:

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

7-11修改部分:

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

hidden_nodes = 10

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

  1. #cross_entropy = -tf.reduce_mean(n_output * tf.log(output))# 
  2. 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 (一) XORerr1 -修改

    博客背景是学习<深度学习之TensorFlow>这本书籍中的作业,修改第七章的作业,把XOR-异或的错误代码修改为正确的. 主要修改有三个地方: 隐藏层一的运算从sigmoid修改为add ...

  2. TensorFlow深度学习应用实践

    http://product.dangdang.com/25207334.html 内 容 简 介 本书总的指导思想是在掌握深度学习的基本知识和特性的基础上,培养使用TensorFlow进行实际编程以 ...

  3. 从1开始Tensorflow——1.超简单的神经网络

    大家好,我是小机智桑,萌新一枚,这是我的第一次-----------------写笔记.(本系列笔记是融合了Tensorflow官方教程.<深度学习--基于Python语言和TensorFlow ...

  4. tensorflow 1.x Saver(保存与加载模型) 预测

    20201231 tensorflow 1.X 模型保存 https://blog.csdn.net/qq_35290785/article/details/89646248 保存模型 saver=t ...

  5. python 虚拟环境 tensorflow GPU

    拿到一个新的容器之后,怎么创建一个独立的GPU训练环境呢?之前弄的时候总是零零散散的,现在把它总结在这里,供自己以及有需要的朋友查阅. conda创建 1.1 下载anaconda wget -c h ...

  6. API pytorch tensorflow

    pytorch与tensorflow API速查表 方法名称 pytroch tensorflow numpy 裁剪 torch.clamp(x, min, max) tf.clip_by_value ...

  7. tensor转换 pytorch tensorflow

    一.tensorflow的numpy与tensor互转 1.数组(numpy)转tensor 利用tf.convert_to_tensor(numpy),将numpy转成tensor >> ...

  8. Tensorflow会话

    Tensorflow中的会话是来执行定义好的运算的.会话拥有并管理Tensorflow程序运行时的所有资源.当计算完成之后需要关闭会话来帮助系统回收资源,否则可能出现资源泄露的问题. Tensorfl ...

  9. tensorflow问题

    20210121 ImportError: No module named 'tensorflow.python' https://stackoverflow.com/questions/414156 ...

最新文章

  1. BZOJ 2139 road(构造,最小生成树)【BZOJ 修复工程】
  2. 独家 | 精选近期机器学习GitHub项目及Reddit热门话题(附链接)
  3. Linux USB 驱动开发(一)—— USB设备基础概念【转】
  4. By Elevator or Stairs? CodeForces - 1249E(动态规划)
  5. shell 如何避免误删目录
  6. [Python] 读取存储.mat数据 scipy.io.loadmat(FileName)和scipy.io.savemat('XXX.mat', {'x': x,'y': y,'z': z})
  7. 叠箱子问题 之 动态规划
  8. php常用函数及其用法,实例分析Fleaphp常见函数功能与用法
  9. FreePic2PDF制作书签
  10. Unity 接入百度AI - Logo商标识别
  11. win10怎么把c盘锁住_win10怎样锁住c盘 win10删除c盘无用文件
  12. web前端-----细线表格(table)的制作
  13. 心态不好的时候留给自己看
  14. 怎么检查计算机启动程序,如何查看电脑开机启动项
  15. 旅游业如何使用数据分析?
  16. 最大流之Dinic算法
  17. RK3288 android 7.1 预装可卸载APK
  18. NPL处理之Word2Vec-task01
  19. 贪吃蛇 java实现超简单的贪吃蛇(附源代码)
  20. 电路邱关源学习笔记——1.1电路模型

热门文章

  1. 清北大学计算机专业学习清单,好专业都在清北交复?快来看看这份院校清单,拥有着全国排名【NO.1】的专业...
  2. notepad++列编辑操作
  3. 忘记win7登陆密码的问题解决2种可能以及其问题的延伸
  4. .NET生成静态页面并分页
  5. mysql5.7.11升级_MySQL升级从5.6.18到5.7.11
  6. 解决IP地址冲突的方法--DHCP SNOOPING
  7. matlab图像拼接_FPGA大赛【四】具体模块设计图像缓存
  8. 转载:WMS、TMS、OMS、WCS都是什么?
  9. 英文文档: 如何使用 OpenSSL 创建与吊销数字证书
  10. 学术英语视听说2听力原文_做英语听力题有哪些非常实用的小技巧?