机器学习概念_3

基于tensorflow搭建的神经网络(Netural Network, NN)模型

一、实现过程

  • 准备数据集,提取特征,输入NN
  • 搭建NN结构,从输入到输出(前向传播:先搭建计算图,再用会话执行)
  • 大量特征输入NN,迭代优化NN参数(反向传播:优化参数)
  • 使用训练好的模型预测和分类

二、张量(tensor)

  • tf.constant:常量Tensor
  • tf.Variable:变量Tensor
  • tf.matmul 矩阵乘矩阵
  • tf.multiply 矩阵中的对应元素各自相乘
  • tf.truncated_normal(list, stddev, mean, seed) 去掉过大偏离点正态分布,stddev标准差,mean均值,seed随机种子
  • tf.random_normal(list, stddev, mean, seed) 正态分布
  • tf.random_uniform(list, stddev, mean, seed) 平均分布
  • tf.zeros 全0数组
  • tf.ones 全1数组
  • tf.fill 全定值数组
名称 exp
0 0 标量scalar s = 123
1 1 向量vector v = [1,2,3]
2 2 矩阵matrix m = [[1,2,3],[4,5,6]]
n n 张量tensor t = [[[[....
import tensorflow as tf

# tensor 常量
a = tf.constant([1.0, 2.0])
b = tf.constant([3.0, 4.0])

result = a + b
# Tensor("add:0", shape=(2,), dtype=float32)
# add:节点名称
# 0:第0个输出
# shape=(2, ) 1维数组,长度2(list元素个数)
# dtype:数据类型
print(result)

会话tf.Session():变量初始化、计算图节点运算都要使用会话

with tf.Session() as sess:
    sess.run(X)  # X表示变量初始化或者节点运算

初始化所有变量

init_op = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init_op)  

用tf.placeholder占位,在sess.run()函数中使用feed_dict={}喂给数据

# 1组数据
x = tf.placeholder(tf.float32, shape=(1,2)) # 1代表数据的数量:1list,2代表list的元素个数
with tf.Session() as sess:
    sess.run(y, feed_dict={[[0.5, 0.6]]})

# 多组数据
x = tf.placeholder(tf.float32, shape=(None,2))
with tf.Session() as sess:
    sess.run(y, feed_dict={[[0.1,0.2],[0.3,0.4][0.5, 0.6]]})
# 两层简单的神经网络(全连接)
import tensorflow as tf

# 定义输入和参数(权重)

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(sess.run(y))
# 两层简单的神经网络(全连接)
import tensorflow as tf

# 定义输入和参数(权重)
# 用placeholder实现输入定义:1组数据

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 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]]}))
# 两层简单的神经网络(全连接)
import tensorflow as tf

# 定义输入和参数(权重)
# 用placeholder实现输入定义:多组数据

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:   MSE(y_, y) = 

        loss = tf.reduce_mean(tf.squre(y_-y))

反向传播训练方法,以减小loss值位位优化目标

反向传播优化器Optimizer:

train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss) 梯度下降优化器

train_step = tf.train.MomentumOptimizer(learning_rate).minimize(loss) 

train_step = tf.train.AdamOptimizer(learning_rate).minimize(loss)

learning_rate(学习率):决定参数每次更新的幅度

 

posted @ 2018-12-20 00:18  起航追梦人  阅读(247)  评论(0编辑  收藏  举报