自学建站网,广州海珠做网站的公司,做外贸网站一定要会英语吗,网站怎么做背景不变页面滑动多任务学习
多任务学习#xff0c;顾名思义#xff0c;就是多个任务模型同时执行#xff0c;进行模型的训练#xff0c;利用模型的共性部分来简化多任务的模型#xff0c;实现模型之间的融合与参数共享#xff0c;可以在一定程度上优化模型的运算#xff0c;提高计算机…多任务学习
多任务学习顾名思义就是多个任务模型同时执行进行模型的训练利用模型的共性部分来简化多任务的模型实现模型之间的融合与参数共享可以在一定程度上优化模型的运算提高计算机的效率但模型本身并没有什么改变。
多任务学习的核心在于如何训练上
交替训练联合训练
通过一个简单的线性变换来展示多任务学习模型的运用。
首先导入需要的包
import tensorflow as tf
import numpy as np
使用numpy制造两组假数据
x_data np.float32(np.random.rand(2, 100)) # 随机输入
y1_data np.dot([0.100, 0.200], x_data) 0.300
y2_data np.dot([0.500, 0.900], x_data) 3.000
构造两个线性模型
b1 tf.Variable(tf.zeros([1]))
W1 tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y1 tf.matmul(W1, x_data) b1b2 tf.Variable(tf.zeros([1]))
W2 tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y2 tf.matmul(W2, x_data) b2
计算方差使方差最小化使模型不断的靠近真实解
# 最小化方差
loss1 tf.reduce_mean(tf.square(y1 - y1_data))
loss2 tf.reduce_mean(tf.square(y2 - y2_data))
构造优化器
# 构建优化器
optimizer tf.train.GradientDescentOptimizer(0.5)
train1 optimizer.minimize(loss1)
train2 optimizer.minimize(loss2) 交替训练
基本思想使两个模型交替进行训练
# 初始化全局变量
init tf.global_variables_initializer()# 启动图 (graph)
with tf.Session() as sess:sess.run(init)for step in range(1, 1001):if np.random.rand() 0.5:sess.run(train1)print(step, W1,b1:, sess.run(W1), sess.run(b1))else:sess.run(train2)print(step, W2,b2:, sess.run(W2), sess.run(b2))
输出结果为 从最终的结果可以看出W1,W2b1,b2已经非常接近真实值了说明模型的建立还是非常有效的。
联合训练
基本思想将两个模型的损失函数结合起来共同进行优化训练
# 联合训练
loss loss1 loss2
# 构建优化器
optimizer tf.train.GradientDescentOptimizer(0.5)
train optimizer.minimize(loss)# 初始化全局变量
init tf.global_variables_initializer()# 启动图
with tf.Session() as sess:sess.run(init)for step in range(1, 300):sess.run(train)print(step, W1,b1,W2,b2:, sess.run(W1), sess.run(b1), sess.run(W2), sess.run(b2))
输出结果为 从结果可以看出模型的参数不断的接近真实值。
应用场景
当你需要同一组数据集去处理不同的任务时交替训练是一个很好地选择。
当两个甚至多个任务需要联合考虑时为了整体的最优而放弃局部最优的时候使用联合训练非常的合适。 欢迎关注和评论