简述

https://blog.csdn.net/a19990412/article/details/82913189
根据上面链接中的前两个学习教程学习
其中Mofan大神的例子非常好,学到了很多
https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/3-2-create-NN/

搭建这个神经网络

其实是从一个层到10层再到10层的这样的一个神经网络。(画图丑。。。求谅解。。就别私戳了)

解析

  • 初始的输入的矩阵为:[[1],300个,[-1]] 大致这样的
  • 在增加一层的那个函数中,最为经典的地方是,偏置(biases)的第一个维度必须选为1。看下面推理。
  • 第一部分:
  • 输入为:(300*1)的矩阵,之后,经过了第一个层,就是(300 * 1)* (1*10) + (1, 10)。这显然是合理的,每一层的数据,到神经网络中的中间层的每一个节点上,然后每个节点上都加一个偏置biases。

就是在每个上都同时加,通过下面的例子就可以看出来。

>>> import numpy as np
>>> a = np.random.normal(0, 1, (2, 4))
>>> a
array([[-0.60675395, -0.06779251,  1.50473051, -0.82511157],[ 1.14550373,  0.372316  ,  0.45110457, -0.41554109]])
>>> b = np.random.normal(0, 1, (1, 4))
>>> b
array([[ 0.48946834, -0.70514578,  2.12102107, -0.25960606]])
>>> a + b
array([[-0.11728561, -0.77293828,  3.62575157, -1.08471763],[ 1.63497208, -0.33282978,  2.57212564, -0.67514715]])
>>>
  • 第二部分:
  • 输出的内容为上面的输出:(300*10)的矩阵。
  • 进行的计算为:(300 * 10) * (10 * 1) + (1, 1) 后面的那个为偏置,每个都加上了这样的一个偏置。

经过上面的推理,我们就可以理解了为什么中间添加新的一层的时候,需要将biases的第一次参数为1

  • 发现写tensorflow就想当于写数学公式一样,怪不得TensorFlow在研究数学的老师那边那么容易上手 hhh

代码

import tensorflow as tf
import numpy as np# TensorFlow嫌弃了我这台电脑的CPU(我这就避免了警报)
# ==================
import osos.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# ==================# 创建一些等距离的数据(数据量为300),同时用np.newaxis进行扩展一个维度
x_data = np.linspace(-1, 1, 300, dtype=np.float32)[:, np.newaxis]
# 创建同等规模的噪音(这里采用的是均值为0,标准差为0.05的,保持shape和类型一致)
noise = np.random.normal(0, 0.05, x_data.shape).astype(np.float32)
# 原数据label(y = x^2 - 0.5) 之后添加一点点噪声(让人感觉更像现实中获取的数据一样)
y_data = np.square(x_data) - 0.5 + noise# 创建一个添加层数的函数,使得实现变得简单
# inputs是输出的东西,in_size表示的是该层的输入层维度,out_size表示的是该层的输出层维度,activation_function就是一个
def add_layer(inputs, in_size, out_size, activation_function=None):# 创建系数矩阵,矩阵规模为 [in_size * out_size]Weights = tf.Variable(tf.random_normal([in_size, out_size]))# 创建一个biases矩阵,这里考虑到biases用0不是那么好,所以,一开始设置的时候加个0.1biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)# 构建方程Wx_plus_b = tf.matmul(inputs, Weights) + biasesif activation_function == None:output = Wx_plus_belse:output = activation_function(Wx_plus_b)return outputxs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])
# 得到中间那一层
l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)
# 得到输出层
prediction = add_layer(l1, 10, 1)
# 在300个求一个平方和的均值,设置了切片的index为1,原因是最后的矩阵规模为300*1,大致类似:[[1],300个,[2]]
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1]))
# 梯度下降训练
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
# 变量初始化
init = tf.global_variables_initializer()
# 启动会话
with tf.Session() as sess:sess.run(init)for i in range(1000):# trainingsess.run(train_step, feed_dict={xs: x_data, ys: y_data})if i % 50 == 0:# to see the step improvementprint(sess.run(loss, feed_dict={xs: x_data, ys: y_data}))

附上有图形演示的代码

由于不同起始数据,画出几个不同的结果。下面列举其中的两个

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
# TensorFlow嫌弃了我这台电脑的CPU(我这就避免了警报)
# ==================
import osos.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# ==================# 创建一些等距离的数据(数据量为300),同时用np.newaxis进行扩展一个维度
x_data = np.linspace(-1, 1, 300, dtype=np.float32)[:, np.newaxis]
# 创建同等规模的噪音(这里采用的是均值为0,标准差为0.05的,保持shape和类型一致)
noise = np.random.normal(0, 0.05, x_data.shape).astype(np.float32)
# 原数据label(y = x^2 - 0.5) 之后添加一点点噪声(让人感觉更像现实中获取的数据一样)
y_data = np.square(x_data) - 0.5 + noise# 创建一个添加层数的函数,使得实现变得简单
# inputs是输出的东西,in_size表示的是该层的输入层维度,out_size表示的是该层的输出层维度,activation_function就是一个
def add_layer(inputs, in_size, out_size, activation_function=None):# 创建系数矩阵,矩阵规模为 [in_size * out_size]Weights = tf.Variable(tf.random_normal([in_size, out_size]))# 创建一个biases矩阵,这里考虑到biases用0不是那么好,所以,一开始设置的时候加个0.1biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)# 构建方程Wx_plus_b = tf.matmul(inputs, Weights) + biasesif activation_function == None:output = Wx_plus_belse:output = activation_function(Wx_plus_b)return outputxs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])
# 得到中间那一层
l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)
# 得到输出层
prediction = add_layer(l1, 10, 1)
# 在300个求一个平方和的均值,设置了切片的index为1,原因是最后的矩阵规模为300*1,大致类似:[[1],300个,[2]]
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1]))
# 梯度下降训练
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
# 变量初始化
init = tf.global_variables_initializer()
# 启动会话
with tf.Session() as sess:sess.run(init)fig = plt.figure()# 创建两个子图ax_begin = fig.add_subplot(2, 1, 1)ax_end = fig.add_subplot(2, 1, 2)ax_begin.scatter(x_data, y_data)ax_end.scatter(x_data, y_data)# 起始版prediction_value = sess.run(prediction, feed_dict={xs: x_data})# plot the predictionax_begin.plot(x_data, prediction_value, 'r-', lw=5)ax_begin.set_title("Begin")plt.tight_layout()for i in range(1000):# trainingsess.run(train_step, feed_dict={xs: x_data, ys: y_data})if i % 50 == 0:# to see the step improvementprint(sess.run(loss, feed_dict={xs: x_data, ys: y_data}))# 经过迭代后的版本prediction_value = sess.run(prediction, feed_dict={xs: x_data})# plot the predictionax_end.plot(x_data, prediction_value, 'r-', lw=5)ax_end.set_title("End")plt.show()

用Tensorflow搭建第一个神经网络相关推荐

  1. 第一讲-tensorflow搭建完整的神经网络步骤(附完整代码)

    目标:神经网络实现鸢尾花分类问题 搭建神经网络步骤:准备数据-->搭建网络-->参数优化 ---> 测试效果 ---> Acc/loss可视化 准备数据 数据集读入 数据集乱序 ...

  2. 【Pytorch学习】用pytorch搭建第一个神经网络

    简述 虽然使用过pytorch来搭建GANs,但是对于Pytorch其实还是不是很熟,这里想系统的学习下.顺便再来做一下笔记. 学习网站 https://morvanzhou.github.io/tu ...

  3. 用TensorFlow搭建一个万能的神经网络框架(持续更新)

    博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never/p/12774058.html 文章代码:https://github.com/LXP-Never/bl ...

  4. 机器学习 | 使用TensorFlow搭建神经网络实现鸢尾花分类

    鸢尾花分类问题是机器学习领域一个非常经典的问题,本文将利用神经网络来实现鸢尾花分类 实验环境:Windows10.TensorFlow2.0.Spyder 参考资料:人工智能实践:TensorFlow ...

  5. 【深度学习】Tensorflow搭建卷积神经网络实现情绪识别

    [深度学习]Tensorflow搭建卷积神经网络实现情绪识别 文章目录 1 Tensorflow的基本使用方法1.1 计算图1.2 Feed1.3 Fetch1.4 其他解释 2 训练一个Tensor ...

  6. 从零开始用TensorFlow搭建卷积神经网络

     https://www.jiqizhixin.com/articles/2017-08-29-14 机器之心GitHub项目:从零开始用TensorFlow搭建卷积神经网络 By 蒋思源2017 ...

  7. tensorflow画损失函数的代码_使用TensorFlow编写您的第一个神经网络

    介绍 神经网络是受生物神经网络启发而产生的一套特殊的机器学习算法,它们彻底改变了机器学习.简单地说,它们是通用的函数近似,可以应用于几乎任何关于学习从输入到输出空间的复杂映射的机器学习问题. 神经网络 ...

  8. #教计算机学画卡通人物#生成式对抗神经网络GAN原理、Tensorflow搭建网络生成卡通人脸

    生成式对抗神经网络GAN原理.Tensorflow搭建网络生成卡通人脸 下面这张图是我教计算机学画画,计算机学会之后画出来的,具体实现在下面. ▲以下是对GAN形象化地表述 ●赵某不务正业.游手好闲, ...

  9. python训练手势分类器_机器学习零基础?手把手教你用TensorFlow搭建图像分类器|干货...

    编者按:Pete Warden是TensorFlow移动团队的技术负责人.曾在Jetpac担任首次技术官.Jetpac的深度学习技术经过优化,可在移动和嵌入式设备上运行.该公司已于2014年被谷歌收购 ...

最新文章

  1. centos7全离线安装docker1.17.12
  2. centos下git clone报401错误解决办法
  3. 对 SAP Spartacus 进行服务器端构建时,编译的资源列表
  4. java 修改 jar 包文件内容的一个实例
  5. matlab调用哈希表,ros与matlab联动使用
  6. html实现 左图右文_让CSS flex布局最后一行左对齐的N种方法
  7. 如何在Visual Studio中开发自己的代码生成器插件
  8. 贝叶斯优化优化参数,以Kmeans为例
  9. HDU1013 POJ1519 Digital Roots(解法三)
  10. 基于opencv利用霍夫变换实现圆形物体的检测
  11. QQ机器人实现RSS订阅(github项目)
  12. 【多目标优化算法】基于分解的多目标进化算法 MOEA/D
  13. 微软中国总部半日游学小记
  14. 关闭Cortana小娜的几种方法(win10的搜索功能无法使用、黑屏/Cortana占用内存过高)
  15. 【Swing】JTextArea文本域组件
  16. 个税继续教育证书有哪些 计算机,个税专项附加扣除中继续教育哪些证书可以扣除呢?...
  17. VUE(四):引入iview
  18. HOUDINI TIP | USING HOU MODULE IN VISUAL STUDIO CODE_手动在vscode里设置houdiniPython模块
  19. javax.accessibility
  20. 机器学习_非参数估计

热门文章

  1. 三重for循环优化_MATALB中对循环操作的优化
  2. 【java】java获取对象属性类型、属性名称、属性值
  3. WordPress更新时提示无法连接到FTP服务器的解决方案
  4. 快排,归并和Shell排序
  5. EasyUI 1.3.6 行号显示不全
  6. 解决packet tracer不能复制CLI内容的问题
  7. 从源文件中读出最后10KB内容到目的文件中
  8. 在Exchange Server 2007中 设置用户邮箱的大小
  9. 剑指offer(Java实现) 二叉搜索树的后序遍历序列
  10. 【知识发现】隐语义模型LFM算法python实现(三)