TensorFlow 多任务学习
生活随笔
收集整理的這篇文章主要介紹了
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) + 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,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))輸出結果為:
從結果可以看出模型的參數不斷的接近真實值。
應用場景
當你需要同一組數據集去處理不同的任務時,交替訓練是一個很好地選擇。
當兩個甚至多個任務需要聯合考慮時,為了整體的最優而放棄局部最優的時候,使用聯合訓練非常的合適。
?
歡迎關注和評論!
總結
以上是生活随笔為你收集整理的TensorFlow 多任务学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: url主机域名可以省略_从输入url到页
- 下一篇: MATLAB GUI如何创建Callba