TensorFlow 多任务学习

多任务学习

多任务学习,顾名思义,就是多个任务模型同时执行,进行模型的训练,利用模型的共性部分来简化多任务的模型,实现模型之间的融合与参数共享,可以在一定程度上优化模型的运算,提高计算机的效率,但模型本身并没有什么改变。

多任务学习的核心在于如何训练上:

  • 交替训练
  • 联合训练

通过一个简单的线性变换来展示多任务学习模型的运用。

首先,导入需要的包

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) + b1

b2 = 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,W2,b1,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))

输出结果为:

从结果可以看出模型的参数不断的接近真实值。

应用场景

当你需要同一组数据集去处理不同的任务时,交替训练是一个很好地选择。

当两个甚至多个任务需要联合考虑时,为了整体的最优而放弃局部最优的时候,使用联合训练非常的合适。

 

欢迎关注和评论!

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值