我是靠谱客的博主 执着乐曲,这篇文章主要介绍Tensorflow框架搭建神经网络Tensorflow框架搭建神经网络,现在分享给大家,希望可以做个参考。

Tensorflow框架搭建神经网络

一、张量、计算图、会话

1. 张量

多维数组(列表) 阶:张量的维数

维数名字例子
0-D0标量 scalars=1 2 3
1-D1向量 vectorv=[1,2,3]
2-D2矩阵 matrixm=[[1,2,3],[4,5,6],[7,8,9]]
n-Dn张量 tensort=[[[… (n个)

张量可以表示0阶到n阶数组(列表)

2.计算图

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", shanpe=(2, ), dtype=float32)

计算图(Graph):搭建神经网络的计算过程,只搭建,不运算。

在这里插入图片描述
y = X W = x 1 ∗ w 1 + x 2 ∗ w 2 y=XW=x_1*w_1+x_2*w_2 y=XW=x1w1+x2w2

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", shanpe=(1, 1), dtype=float32)

3.会话(session)

执行计算图中的节点运算

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", shanpe=(1, 1), dtype=float32)
[[11.]]

二、前向传播

1.参数

即线上的权重W,用变量表示,随机给初值。

tf.Variable(tf.random_normal([2,3], stddev=2, mean=0, seed=1))
#              正太分布   产生2*3矩阵  标准差    均值   随机种子  

2.神经网络的实现过程:

  1. 准备数据集,提取特征,作为输入喂给神经网络(Neural Network. NN)
  2. 搭建NN结构,从输入到输出(先搭建计算图,再用会话执行)
    (NN前向传播算法 —> 计算输出)
  3. 大量特征数据喂给NN,迭代优化NN参数
    (NN反向传播算法 —> 优化参数训练模型)
  4. 使用训练好的模型预测和分类

3.前项传播 -> 搭建模型,实现推理(以全连接网络为例)

eg. 生产一批零件将体积x1和重量x2为特征输入NN,通过NN后输出一个数值。
在这里插入图片描述

  • 变量初始化、计算图节点运算都要用会话(with结构)实现
with tf.Session() as sess:
	sess.run()
  • 变量初始化:在sess,run函数中用tf.global_variables_initializer()
init_op = tf.global_variables_initializer()
sess.run(init_op)
  • 计算图节点运算:在sess.run函数中写入待运算的节点
sess.run(y)
  • 用tf.placeholder占位,在sess.run函数中用feed_dict喂数据
#喂一组数据:
x = tf.placeholder(tf.float32, shape=(1,2))
sess.run(y, feed_dict={x:[[0.5, 0.6]]})
    
#喂多组数据:
x = tf.placeholder(tf.float32, shape=(None,2))
sess.run(y, feed_dict={x:[[0.1, 0.2], [0.2, 0.3], [0.3, 0.4], [0.4, 0.5]]})

完整代码:

#-*-coding:utf-8-*-

#两层简单神经网路(全连接)
import tensorflow as tf

#定义输入和参数
#用placeholder实现输入定义 (sess.run中喂多组数据)
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(sess.run(y, feed_dict={x:[[0.7, 0.5],[0.2, 0.3], [0.3, 0.4], [0.4, 0.5]]}))

三、反向传播

  • 反向传播 -> 训练模型参数,在所有参数上用梯度下降,使NN模型在训练数据上的损失函数最小。
  • 损失函数(loss):预测值(y)与已知答案(y_)的差距
  • 均方误差MSE
    loss = tf.reduce_mean(tf.square(y_-y))
  • 反向传播训练方法:以减小loss为优化目标
  • 学习率:决定参数每次更新的幅度

四、完整神经网络搭建代码

#-*-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]


#-----------------------------1前向传播:定义输入、参数和输出-------------------------------#
#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反向传播:定义损失函数、反向传播方法-------------------------------#
#2定义损失函数及反向传播方法
loss = tf.reduce_mean(tf.square(y - y_))
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss)


#------------------------------------3生成会话,训练STEPS轮---------------------------------------#
#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 = 3000
    for i in range(STEPS):
        start = (i * BATCH_SIZE) % 32
        end = start + BATCH_SIZE
        sess.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))

注:参考中国大学MOOC曹健老师《人工智能实践:Tensorflow笔记》。

最后

以上就是执着乐曲最近收集整理的关于Tensorflow框架搭建神经网络Tensorflow框架搭建神经网络的全部内容,更多相关Tensorflow框架搭建神经网络Tensorflow框架搭建神经网络内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部