多层神经网络与动态学习率

1.动态学习率

global_step=tf.Variable(0,trainable=False)  # 动态变化的学习轮数,初始值为0,且过程中不可被训练
learning_rate=tf.compat.v1.train.exponential_decay(0.45,global_step,10,0.96)  # 动态学习速率
# 初始值0.45,每10轮调整一次,每次乘以0.96

2.调整优化器

cross_entropy=tf.reduce_mean(-tf.reduce_sum(y_data*tf.compat.v1.log(y),axis=1))  # 交叉熵
optimizer=tf.compat.v1.train.GradientDescentOptimizer(learning_rate)  # 构建优化器,学习率是之前构建的
train=optimizer.minimize(cross_entropy,global_step=global_step) # 训练节点,更新学习的轮数

3.输出global_step
之前定义的是计算,需要启动会话sess.run一下,才能获得具体的数值

sess.run(global_step)

4.多层神经元
在这里插入图片描述

w0=tf.Variable(tf.zeros([4,6]))  # 隐层神经元的权值矩阵
w1=tf.Variable(tf.zeros([6,3]))  # 输出层神经元的权值矩阵
b0=tf.Variable(tf.zeros([6]))  # 隐层神经元的阈值
b1=tf.Variable(tf.zeros([3]))  # 输出层神经元的阈值

5.函数
函数模块不同

H=tf.sigmoid(tf.matmul(x_data,w0)+b0)  # 隐层神经元的输出
y=tf.nn.softmax(tf.matmul(H,w1)+b1)   # 网络的输出值

整体的代码

from sklearn.datasets import load_iris
import tensorflow as tf
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt


tf.compat.v1.disable_eager_execution()
data, label=load_iris(True)
tf.one_hot(label,3)  # 将标签转换成0-1编码的形式

with tf.compat.v1.Session() as sess:  # 将样本标签转为独热编码的形式
    label=sess.run(tf.one_hot(label,3))

global_step=tf.Variable(0,trainable=False)  # 动态变化的学习轮数,初始值为0,且过程中不可被训练
learning_rate=tf.compat.v1.train.exponential_decay(0.45,global_step,10,0.96)  # 动态学习速率
# 初始值0.45,每100轮调整一次,每次乘以0.96
data_tr,data_te,label_tr,label_te=train_test_split(data,label,test_size=0.2)
# 将数据集拆分成训练集合测试集
'''
搭建神经网络(定义计算)
'''
x_data=tf.compat.v1.placeholder(tf.float32,[None,4])  # 占位符:网络的输入
y_data=tf.compat.v1.placeholder(tf.float32,[None,3])  # 占位符:网络的目标输出

w0=tf.Variable(tf.zeros([4,6]))  # 隐层神经元的权值矩阵
w1=tf.Variable(tf.zeros([6,3]))  # 输出层神经元的权值矩阵
b0=tf.Variable(tf.zeros([6]))  # 隐层神经元的阈值
b1=tf.Variable(tf.zeros([3]))  # 输出层神经元的阈值

H=tf.sigmoid(tf.matmul(x_data,w0)+b0)  # 隐层神经元的输出
y=tf.nn.softmax(tf.matmul(H,w1)+b1)   # 网络的输出值

cross_entropy=tf.reduce_mean(-tf.reduce_sum(y_data*tf.compat.v1.log(y),axis=1))  # 交叉熵
optimizer=tf.compat.v1.train.GradientDescentOptimizer(learning_rate)  # 构建优化器
train=optimizer.minimize(cross_entropy,global_step=global_step) # 训练节点
# 轮数是要迭代
acc=tf.reduce_mean(tf.cast(tf.equal(tf.argmax(y_data,1),tf.argmax(y,1)),dtype=tf.float32)) # 精度

sess=tf.compat.v1.Session()
sess.run(tf.compat.v1.global_variables_initializer())
learning=[]
for i in range(1000):
    sess.run(train,feed_dict={x_data:data_tr,y_data:label_tr})
    acc_tr=sess.run(acc,feed_dict={x_data:data_tr,y_data:label_tr})
    print(i,'global_step',sess.run(global_step),acc_tr)
    learning.append(sess.run(learning_rate))
acc_te=sess.run(acc,feed_dict={x_data:data_te,y_data:label_te})
print('测试集精度',acc_te)
sess.close()
plt.plot(learning)
plt.show()

最终运行的学习速率的图片,学习速率是随着轮数的增加逐渐减小的在这里插入图片描述
感谢阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值