tensorflow学习笔记——tensorflow框架

github:https://github.com/0104lyh/TensorFlow-

张量,计算图,会话

tensorflow学习笔记——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])

tensorflow学习笔记——tensorflow框架

所谓前项传播,就是搭建一个模型,让模型具有推理能力。通过一个输入给出相应的输出。

#简单神经网络
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为训练目标

我们需要一个叫做学习率的参数,学习率的意思在于决定每次参数更新的幅度
tensorflow学习笔记——tensorflow框架
tensorflow学习笔记——tensorflow框架这是三种优化的方法,第一个是梯度下降。

3.6.py代码的损失函数下降结果:
tensorflow学习笔记——tensorflow框架