tensorflow学习笔记——tensorflow框架
github:https://github.com/0104lyh/TensorFlow-
张量,计算图,会话
先放一张图,这个是大概神经网络的实现过程。
在这之前说几个概念便于以后重复理解:
Tensorflow的nn用张量表示数据,用计算图搭建神经网络,用会执行计算图,优化线上的权重(参数w)得到模型。
张量(tensor):多维数组(列表)
阶:张量的维数,0阶张量称为标量,1阶张量称为向量,2阶张量称为矩阵,张量的阶数可以用中括号来判断
前向传播
#w=tf.Variable(tf.random_normal([2,3],stddev=2,mean=0,seed=1))
#varable是图变量的意思
#random_normal是随机产生正太分布
#stddev=2的一时是标准差为2,mean=0的意思是均值为0,seed=1的意思是随机种子为1
#当然,也可以用tensorflow在数组里头放入常量,比如tf.zero就是全0数组:
#例子:tf.zero([3,2],int 32)生成[[0,0],[0,0],[0,0]],相同的还有tf.one
#tf.fill为全定值数组tf.fill([3,2],4)这个3,2的数组就全为4
#还有一种是直接给值:tf.constant([3,2,1])
所谓前项传播,就是搭建一个模型,让模型具有推理能力。通过一个输入给出相应的输出。
#简单神经网络
import tensorflow as tf
#传入参数x
x = tf.constant([[0.7,0.5]])
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("y in 3.2.py is:\n",sess.run(y))
这大致为一个前向传播的简单过程。这里只用了一组X的参数。当然也可以喂入多组数据,这个时候就会用到placeholder来定义喂入的数据,大致入下:
x=placeholder(tf.float32,shape=(None,2))
这里因为不确定喂入的几组数据,因此在shape=()后面写了一个none。
反向传播
用来训练参数模型,在所有参数上用梯度下降法,使NN模型在训练集上的损失函数最小;
损失函数(loss):预测值y与已知答案y_之间的差距
均方误差:可以用tensorflow的函数来写出一下的代码
loss = tf.reduce_mean(tf.square(y_-y))
反向传播的方法就是为了降低loss为训练目标
我们需要一个叫做学习率的参数,学习率的意思在于决定每次参数更新的幅度这是三种优化的方法,第一个是梯度下降。
3.6.py代码的损失函数下降结果: