基本概念
基于TensorFlow的神经网络:用张量表示数据,用计算图搭建神经网络,用会话执行计算图,优化线上的权重(参数),得到模型。
张量(tensor):多维数组(列表)
阶:张量的维数
维数 阶 名字 例子
0-D 0 标量 scalar s=123
1-D 1 向量 vector v=[1,2,3]
2-D 2 矩阵 matrix m=[[1,2,3],[4,5,6],[7,8,9]]
n-D 3 张量 tensor t=[[[.........n个
张量可以表示0阶到n阶数组(列表)
张量加法:
```
import tensorflow as tf
result = a + b
print(result)
```
#结果显示:Tensor("add:0", shape=(2,), dtype=float32)
| | | | |
节点名 第0个 维 一维 数据类型
输出 度 数组
长度2
计算图只描述了运算过程,不计算运算结果
---------------------------------------------------------
计算图(Graph):搭建神经网络的计算过程,只搭建,不运算。
会话(Senssion):执行计算图中的节点运算。
参数:即神经元线上的权重W,用变量表示,随机给初值。
| | | | |
正态分布 产生2*3矩阵 标准差为2 均值为0 随机种子
神经网络的实现过程:
1、准备数据集,提取特征,作为输入喂给神经网络
2、搭建NN结构,从输入到输出(先搭建计算图,再用会话执行)
(NN前向传播算法 --> 计算输出)
3、大量特征数据喂给NN,迭代优化NN参数
(NN反向传播算法 --> 优化参数训练模型)
4、使用训练好的模型预测和分类
--------------------------------------------------------------------------------------
一、前向传播 --> 搭建模型,实现推理(以全连接网络为例)
eg. 生产一批零件将体积X1和重量X2为特征输入NN,通过NN后输出一个数值。
变量初始化、计算图节点运算都要用会话(with结构)实现:
with tf.Session() as sess:
sess.run()
喂一组数据:
喂多组数据:
二、反向传播 --> 训练模型参数,在所有参数上用梯度下降,使NN模型在训练数据上的损失函数最小
损失函数(loss):预测值(y)与已知答案(y_)的差距
均方误差MSE:
反向传播训练方法:以减小loss值为优化目标
学习率:决定参数每次更新的幅度
搭建神经网络:准备、前传、后传、迭代
0 准备
import
常量定义
生成数据集
1 前向传播:定义输入、参数、刷出
x=
y_=
w1=
w2=
a=
y=
2 反向传播:定义损失函数、反向传播方法
loss=
train_step=
3 生成会话,训练STEPS轮
sess_run(init_op)
STEPS=3000
for i in range(STEPS):
start=
end=
eg:
'''
#coding:utf-8
import tensorflow as tf
import numpy as np
BATCH_SIZE = 8 #一次喂入神经网络多少组数据
seed = 23455 #
#基于seed产生随机数
rng = np.random.RandomState(seed)
#随机数返回32行2列的矩阵 表示32组 体积和体重 作为输入数据集
#从X这个32行2列的矩阵中 取出一行 判断如果和小于1 就给Y赋值1 如果和不小于1 则给Y赋值0
#Y作为输入数据集的标签(正确答案) 人为给出零件的合格与否 1合格 0不合格
Y = [[int(x0 + x1 < 1)] for (x0,x1) in X]
#上面一行代码类似于下面
#for (x0,x1) in X:
# if x0+x1<1:
# Y=1
# else:
# Y=0
print("X:\n",X)
print("Y:\n",Y)
#1定义神经网络的输入、参数、输出,定义前向传播过程
#前向传播过程描述
#2定义损失函数及反向传播方法。
#3生成会话,训练STEPS轮
#输出目前(未经训练)的参数取值
print("\n")
#训练模型
STEPS = 3000 #训练3000轮
for i in range(STEPS):
start = (i*BATCH_SIZE) % 32
end = start + BATCH_SIZE
if i % 500 == 0:
print("After %d training step(s),loss on all data is %g" % (i, total_loss))
#输出训练后的参数取值
print("\n")
'''