• 基本概念

1.Tensorflow的加法

import tensorflow as tf
a = tf.constant([1.0, 2.0])
b = tf.constant([3.0, 4.0])
result = a + b
print(result)

打印出这句话:Tensor("add:0", shape=(2, ), dtype=float32),意思是result是一个名称为add:0的张量,shape=(2, )表示一位数组长度为2,dtype=float32表示数据类型为浮点型。

2.计算图

import tensorflow as tf
x = tf.constant([[1.0, 2.0]])
w = tf.constant([[3.0], [4.0]])
y = tf.matmul(x, w)
print(y)

打印出这句话:Tensor("matmul:0", shape(1, 1), dtype=float32),可以看出print的结果显示y是一个张量,只搭建承载计算过程的计算图,并没有运算。

3.会话

import tensorflow as tf
x = tf.constant([[1.0, 2.0]])
w = tf.constant([[3.0], [4.0]])
y = tf.matmul(x, w)
print(y)
with tf.Session() as sess:print(sess.run(y))

打印结果如下:

Tensor("matmul:0", shape(1, 1), dtype=float32)

[[11. ]]

可以看到,运行Session()会话前只打印出y是个张量的提示,运行Session()会话后打印出了y的结果1.0×3.0+2.0×4.0=11.0。

  • 神经网络的参数

常用的生成随机数/数组的函数:

tf.random_normal()  生成正态分布随机数

tf.truncated_normal()  生成去掉过大偏离点的正态分布随机数

tf.random_uniform()  生成均匀分布随机数

tf.zeros  生成全0数组

tf.ones  生成全1数组

tf.fill  生成全定值数组

tf.constant  生成直接给定值的数组

  • 神经网络的搭建

实现过程:

1.准备数据集,提取特征,作为输入喂给神经网络

2.搭建NN结构,从输入到输出(先搭建计算图,再用会话执行)

(NN前向传播算法计算输出)

3.大量特征数据喂给NN,迭代优化NN参数

(NN反向传播算法优化参数训练模型)

4.使用训练好的模型预测和分类

  • 前向传播

1.用placeholder实现输入定义(sess.run中喂入一组数据)的情况

import tensorflow as tf# 用tf.placeholder占位,在sess.run函数中用feed_dict喂数据
x = tf.placeholder(tf.float32, shape=(1, 2))
W1= tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
W2= tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))a = tf.matmul(x, W1)
y = tf.matmul(a, W2)# 变量初始化、计算图节点运算都要用会话(with结构)实现
with tf.Session() as sess:# 变量初始化:在sess.run函数中用tf.global_variables_initializer()汇总所有待优化变量init_op = tf.global_variables_initializer()# 计算图节点运算:在sess.run函数中写入待运算的节点sess.run(init_op)print("y in tf3_4.py is:\n",sess.run(y, feed_dict={x: [[0.7,0.5]]}))

2.用placeholder实现输入定义(sess.run中喂入多组数据)的情况

import tensorflow as tf# 定义输入和参数
x = tf.placeholder(tf.float32, shape=(None, 2))
W1= tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
W2= tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))# 定义前向传播过程
a = tf.matmul(x, W1)
y = tf.matmul(a, W2)# 用会话计算结果
with tf.Session() as sess:init_op = tf.global_variables_initializer()sess.run(init_op)print("the result of tf3_5.py is :\n",sess.run(y, feed_dict={x: [[0.7,0.5],[0.2,0.3],[0.3,0.4],[0.4,0.5]]}))print("W1:\n",sess.run(W1))print("W2:\n",sess.run(W2))
  • 反向传播

反向传播:训练模型参数,在所有参数上用梯度下降,使NN模型在训练数据上的损失函数最小。

损失函数(loss):计算得到的预测值y与已知答案y_的差距。

反向传播训练方法:以减小loss值为优化目标,有梯度下降、momentum优化器、adam优化器等优化方法。

学习率:决定每次参数更新的幅度。

  • 搭建神经网络的八股

0.导入模块,生成模拟数据集:

import

常量定义

生成数据集

1.前向传播:定义输入、参数和输出:

x=   y=

w1=   w2=

a=   y=

2.反向传播:定义损失函数、反向传播方法:

loss=

train_step=

3.生成对话,训练STEPS轮:

with tf.Session() as sess:init_op = tf.global_variables_initializer()sess.run(init_op)STEPS = 3000for i in range(STEPS):start =end =sess.run(train_step, feed_dict=)

举例:

随机产生32组生产出的零件的体积和重量,训练3000轮,每500轮输出一次损失函数。

#coding:utf-8
# 0.导入模块,生成模拟数据集
import tensorflow as tf
import numpy as np
BATCH_SIZE = 8
seed = 23455# 基于seed产生随机数
rng = np.random.RandomState(seed)
# 随机数返回32行2列的矩阵,表示32组体积和重量作为输入数据集
X = rng.rand(32,2)
# 从X这个32行2列的矩阵中取出一行,判断如果和小于1,给Y赋值1,如果和不小于1,给Y赋值0
# 作为输入数据集的标签(正确答案)
Y = [[int(x0 + x1 <1)] for (x0, x1) in X]
print("X:\n",X)
print("Y:\n",Y)# 1.定义神经网络的输入、参数和输出,定义前向传播过程
x = tf.placeholder(tf.float32, shape=(None, 2))
y_= tf.placeholder(tf.float32, shape=(None, 1))w1= tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
w2= tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))a = tf.matmul(x, w1)
y = tf.matmul(a, w2)# 2.定义损失函数及反向传播方法
loss = tf.reduce_mean(tf.square(y-y_))
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss)# 3.生成会话,训练STEPS轮
with tf.Session() as sess:init_op = tf.global_variables_initializer()sess.run(init_op)# 输出目前(未经训练)的参数取值print("w1:\n",sess.run(w1))print("w2:\n",sess.run(w2))print("\n")# 训练模型STEPS = 3000for i in range(STEPS):start = (i*BATCH_SIZE) % 32end = start + BATCH_SIZEsess.run(train_step, feed_dict={x: X[start:end], y_: Y[start:end]})if i % 500 == 0:total_loss = sess.run(loss, feed_dict={x: X, y_: Y})print("After %d training step(s), loss on all data is %g" % (i, total_loss))# 输出训练后的参数取值print("\n")print("w1:\n",sess.run(w1))print("w2:\n",sess.run(w2))

由神经网络的实现结果,我们可以看出,总共训练3000轮,每轮从X的数据集和Y的标签中抽取相对应的从start开始到end结束个特征值和标签,喂入神经网络,用sess.run求出loss,每500轮打印一次loss值。经过3000轮后,我们打印出最终训练好的参数w1、w2。

After 0 training step(s), loss on all data is 5.13118
After 500 training step(s), loss on all data is 0.429111
After 1000 training step(s), loss on all data is 0.409789
After 1500 training step(s), loss on all data is 0.399923
After 2000 training step(s), loss on all data is 0.394146
After 2500 training step(s), loss on all data is 0.390597w1:[[-0.7000663   0.9136318   0.08953571][-2.3402493  -0.14641267  0.58823055]]
w2:[[-0.06024267][ 0.91956186][-0.0682071 ]]

学习地址:https://www.icourse163.org/course/PKU-1002536002

Tensorflow笔记:搭建神经网络相关推荐

  1. Tensorflow学习笔记——搭建神经网络

    目录 1.搭建神经网络6步法 2.函数用法和介绍 (1)tf.keras.models.Sequential() (2)Model.compile() (3)model.fit() (4)model. ...

  2. (tensorflow笔记)神经网络中的一些关键概念(学习率、激活函数、损失函数、欠拟合和过拟合、正则化和优化器)

    目录 1.神经网络复杂度 空间复杂度 时间复杂度 2.学习率策略 指数衰减学习率 分段常数衰减 3.激活函数 sigmoid tanh ReLU Leaky ReLU 建议 4.损失函数 均方误差损失 ...

  3. DeepMind发布Sonnet 帮你用TensorFlow快速搭建神经网络

    去年 DeepMind 作出决定,将全部研究搬到 TensorFlow 框架上进行.近一年时间过去,回头来看,DeepMind 认为这项选择十分正确--许多模型的学习过程大幅加速:TensorFlow ...

  4. TensorFlow学习笔记(九)tf搭建神经网络基本流程

    1. 搭建神经网络基本流程 定义添加神经层的函数 1.训练的数据 2.定义节点准备接收数据 3.定义神经层:隐藏层和预测层 4.定义 loss 表达式 5.选择 optimizer 使 loss 达到 ...

  5. 北京大学曹健——Tensorflow笔记 03 搭建神经网络

    透过vim ~/.vimrc 写入 set ts=4, set nu,保存退出来设定vim编辑器.自动换行,4个空格 计算图:只搭建神经网络,不运行运算,不计算结果. 上图中:x 为 1行,2列的张量 ...

  6. 人工智能实践:TensorFlow笔记学习(八)—— 卷积神经网络实践

    大纲 7.1  复现已有的卷积神经网络 7.2  用vgg16实现图片识别 目标 掌握复现已有网络,用vgg16实现图片识别 7.1  复现已有的卷积神经网络 VGGNet是Karen simonya ...

  7. Tensorflow初学者之搭建神经网络基本流程

    本文是学习这个视频课程系列的笔记,课程链接是 youtube 上的, 讲的很好,浅显易懂,入门首选, 而且在github有代码, 想看视频的也可以去他的优酷里的频道找. Tensorflow 官网 神 ...

  8. Tensorflow搭建神经网络八股及实现鸢尾花数据集分类

    tensorflow笔记系列文章均参考自中国大学Mooc上北京大学软件与微电子学院曹建老师的<Tensorflow笔记2>课程.曹建老师讲的非常棒,受益良多,强烈建议tensorflow初 ...

  9. 深度学习系列笔记——贰 (基于Tensorflow Keras搭建的猫狗大战模型 一)

    猫狗大战是著名的竞赛网站kaggle几年前的一个比赛,参赛者得到猫狗各12500张图片,作为训练集,另外还会得到12500张猫和狗的图片,作为验证.最后提交结果至kaggle平台,获得评测分数. 本篇 ...

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

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

最新文章

  1. centos创建vsftpd虚拟用户
  2. Python与用户的交互 ,格式化输出的三种方式
  3. php 基础函数写法,字符串,常用函数
  4. 计算机网络接入接口设备,一种计算机网络集成接口设备的制作方法
  5. 腾讯地图 marker 从地图上清空
  6. sed 、awk用法
  7. Dynamics AX2012 标准权限控制工作原理
  8. 各大浏览器的最小字体与默认字体
  9. linux 桌面小部件,在Ubuntu中安装桌面小部件 | MOS86
  10. 《通关!游戏设计之路》笔记(未整理完)
  11. SPSS实现两变量偏相关分析
  12. 使用场景法对在线购网站编写的用例示范
  13. html form提交heard,德普前妻Amber Heard戛纳合辑
  14. CSM (Compatility Suport Module)兼容支持模块
  15. 老路用得上的商学课-61-80学习(读书)笔记
  16. WAF - SQL注入之绕过云锁 靶场实战
  17. Method threw ‘feign.codec.DecodeException‘ exception.
  18. .7z.001 这种让人头疼的分卷格式
  19. 读书笔记:《黎明之街》
  20. 华为汽车BU业务布局及分析框架

热门文章

  1. Service的使用
  2. WordPress 中文图片 上传 自动重命名
  3. ArcGIS Server .net Web ADF 体系结构
  4. NLTK在python中文字所表达的情感预测
  5. 利用Python中的GDAL和OGR模块实现shapefile对栅格DEM数据的裁剪
  6. Python 定时器制作
  7. ENVI5.3.1使用Landsat 8影像进行主成分分析实例操作
  8. listview 加载的时候报java.lang.IllegalArgumentException: column ‘_id’ does not exist 错误
  9. Flutter实战之Builder和StatefulBuilder
  10. Spring StringUtils类中几个有用的字符串处理方法