TensorFlow入门-05.用TensorFlow训练神经网络模型

1.placeholder机制

作用:解决多次迭代中,计算图过大的问题。

    |- 如果不使用placeholder机制,多次迭代中,多个特征向量,对应多个计算图。计算图利用率低。

    |- 使用placeholder机制,多次迭代中,多个特征向量,对应一个计算图。计算图利用率高。

特点:

    |- 是一种张量,因此它的类型可以在声明的时候指定,一旦声明就不可改变;

    |- 是一种张量,因此它的维度可以不指定,系统可以根据数据维度推导出。

使用方法:

    |- 1.声明placeholder变量

x = tf.placeholder(tf.float32, shape=(1, 2), name="input")

    |- 2.在用到涉及到该变量的时候,对其进行赋值

print(sess.run(y, feed_dict={x: [[0.7, 0.9]]})) # y是一个依赖于x的变量

        |- feed_dict是一个字典(map),在字典中必须给出每个用到的placeholder的取值。

完整样例:

使用了placeholder的前向传播模型代码:

# 1.导入模块
import tensorflow as tf

# 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))

# 3.声明特征向量
x = tf.placeholder(tf.float32, shape=(1, 2), name="inport")

# 4.定义计算
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)

# 5.创建会话
sess = tf.Session()

# 6.在会话中初始化变量
init_op = tf.global_variables_initializer()
sess.run(init_op)

# 7.给placeholder变量“x”赋值、执行计算、并输出结果
print(sess.run(y, feed_dict={x: [[0.7, 0.9]]}))

# 8.关闭会话
sess.close()

结果:

[[ 3.95757794]]

同一个placeholder变量传入多个值:

用于一次性计算多个样例

    |- 1.声明placeholder变量时,指定维数

# shape(3, 2) 表示这个placeholder变量的维数为3,长度为2.也即:该矩阵为3行2列。
x = tf.placeholder(tf.float32, shape=(3, 2), name="input")

    |- 2.在用到涉及到该变量的时候,对其进行赋值

        所赋的值应与声明时的属性一致。

print(sess.run(y, feed_dict={x: [[0.7, 0.9], [0.1, 0.4], [0.5, 0.8]]})) # y是一个依赖于x的变量

在得到一个batch的前向传播结果之后,需要定义一个损失函数来刻画当前的预测值和真实答案之间的差距。然后通过反向传播算法来调整神经网络的取值是的差距可以被缩小。

2.损失函数的实现样例:

# 使用sigmoid函数将y转换为0~1之间的数值。转换后y代表预测是正样本的概率,1-也代表预测是负样本的概率。
y = tf.sigmoid(y)

# 定义损失函数来刻画预测值与真实值的差距,即交叉熵
cross_entropy = -tf.reduce_mean(
	y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0))
	+(1-y)*tf.log(tf.clip_by_value(1-y, 1e-10, 1.0)))

# 定义学习率	
learning_rate = 0.001

# 定义反向传播算法来优化神经网络中的参数
train_step = tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy)

    |- 函数介绍:

        1. tf.sigmoid():将y转换为介于0~1之间的数值。
        2. tf.reduce_mean():求平均值
            |- 无参:默认所有数的平均价
            |- 参数为0:列的平均值
            |- 参数为1:行的平均值
        3. tf.log():计算对数
        4. tf.clip_by_value(A, min, max):输入一个张量A,把A中的每一个元素的值都压缩在min和max之间。小于min的让它等于min,大于max的元素的值等于max。

        5. tf.train.AdamOptimizer():此函数是Adam优化算法,是一个寻找全局最优点的优化算法,引入了二次方梯度校正,相比于基础SGD算法,1.不容易陷于局部优点。2.速度更快
        6. minimize():计算出梯度,并将梯度作用在变量上。

3.TensorFlow中的优化方法:

最常用:

1.tf.train.MomentumOptimizer
2.tf.train.AdamOptimizer
3.tf.train.GradientDescentOptimizer

其他:

1.tf.train.AdadeltaOptimizer
2.tf.train.AdagradOptimizer
3.tf.train.AdagradDAOptimizer
4.tf.train.FtrlOptimizer
5.tf.train.ProximalGradientDescentOptimizer
6.tf.train.ProximalAdagradOptimizer
7.tf.train.RMSPropOptimizer

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值