如何利用手機遠訓練機器學習模型

| 1.引子

在現實任務中,我們在調整模型的過程中總是難免會有因為各種各樣的原因離開“工作站”的時候,但心裡總是難免會“掛念”自己的模型有沒有新的參數可以測試,或者是運行後有了什麼樣的效果。

既然如此,我們不妨試試製作一個利用手機遠程調參的腳本。

| 2.準備

這次我們用的是Python3.6,有pong友或許會奇怪怎麼和之前不一樣了,原因其實有很多,但主要原因是咱們總得跟隨著時代的潮流。不過不用擔心,Python3.6和Python2.7的區別沒有想象中的那麼大,事實上,大部分時候可能都是在糾結那個print函數的用法而已。

另外,我們需要安裝一個新的第三方模塊——itchat,這個模塊的主要功能是提供我們“網頁微信”的api調用,有的pong友可能已經猜到我們打算怎麼做了,畢竟是一個“簡單”的腳本,如果要我們從頭寫一個app然後t和電腦上的web形式或者是桌面軟件形式的遠程調參軟件通信實現手機調參的話,那咱們的教程或許可以寫到明年。

然後,就是一個希望拿來測試效果的模型代碼,pong友們想必都有自己的考量,就不多說了。

| 3.運行原理

進行手機調參的原理並不複雜,我們利用itchat提供的網頁微信api來使電腦和手機之間能夠利用微信中的文件傳輸助手實現實時通信,然後手機就可以通過這個通道傳輸我們希望電腦上的模型用來運行的參數(稍稍需要注意的是模型的參數有幾個類別,“str”型,“int”型,“float”型,“None”,和“bool”型,但是從手機上傳輸過來的內容只有“str”型),電腦上的模型得到參數後開始運行,運行的結果打包成一組字符串通過微信返回給手機端。

| 4.使用方法

腳本我們可以從文末附的github鏈接中下載,非常簡單,就不特意講解編寫過程了,有感興趣的pong友可以自行了解,這裡我們就直接介紹使用方法:

首先打開我們希望用於調參的模型腳本,導入下載好的調參腳本“MobileTuner”,假設我們的模型如下:

from sklearn.svm import SVC
import numpy as np

def model(data=np.array([[1,2],[0,1]]),label=np.array([0,1])):
clf=SVC(probability=True,max_iter=100)
clf.fit(data,label)

result=clf.predict([[1,1]])
target=[0]
for i in result:
if i==target:
print("True")
else:
print("False")

if __name__=="__main__":
model()

這個模型接收兩個樣本用於訓練,然後預測一個測試數據,並打印預測的結果:

我們導入MobileTuner腳本,然後將其修改一下:

from sklearn.svm import SVC
import numpy as np
from MobileTuner import mobile_tuner

def model(data=np.array([[1,2],[0,1]]),label=np.array([0,1]),**kwargs):
tuner=kwargs['tuner']
clf=SVC(probability=tuner.parameter[0],max_iter=tuner.parameter[1])
clf.fit(data,label)
result=clf.predict([[1,1]])
target=[0]
result_info=''
for i in result:
if i==target:
result_info="True"
else:
result_info ="False"
return result_info

if __name__=="__main__":
mobile_tuner(model,'SVC:\\nprobability=\\nmax_iter=\\n')

Main函數里將模型的原函數model作為參數放入MobileTuner腳本提供的mobile_tuner函數,然後把希望出現的關於參數提示的字符串傳入第二個參數。

而對於原函數,增加**kwargs參數或者tuner參數用用於接收一個變量名為tuner的對象,其屬性tuner.parameter裡面包含的是手機端傳來的參數組成的列表,在模型文件中與各個參數位置對應好,例如我們希望在手機端輸入的第一個參數提供給“probability”,第二個給“max_iter”;然後,將我們希望返還的模型運行完成後的信息寫為原函數的返回結果。

運行模型,便會彈出一個二維碼:

https://login.weixin.qq.com/l/Id7ljEmjsA== (二維碼自動識別)

掃描,手機端確認登陸微信,注意這個時候如果有pong友在電腦上登陸了微信的話會被彈出,因為用的是同一個端口。

電腦端輸出如下信息:

Getting uuid of QR code.
Downloading QR code.
Please scan the QR code to log in.
Please press confirm on your phone.
Loading the contact, this may take a little while.
Login successfully as UserName
Start auto replying.

手機端中,微信的文件助手便會彈出消息:

如何利用手機遠訓練機器學習模型

我們輸入調參,開啟調參模式:

如何利用手機遠訓練機器學習模型

手機端便開啟調參模式,並傳入我們預先設置好的參數提示,用於提示我們輸入參數的順序:

如何利用手機遠訓練機器學習模型

電腦端接收消息同時開始準備調參:

如何利用手機遠訓練機器學習模型

對著我們自己設置的參數提示,輸入參數,中間用空白字符隔開(當然了,pong友們也可以將其改成其它自己喜歡的形式,逗號隔開,或者其它什麼方式):

如何利用手機遠訓練機器學習模型

電腦端表示接收到參數,運行模型:

如何利用手機遠訓練機器學習模型


手機端收到模型運行完成後的反饋結果:

如何利用手機遠訓練機器學習模型

這便完成了一次遠程傳入參數使模型運行的過程。

然後我們如果想用文件助手做其他事的時候,可以輸入“結束”關閉調參模式:

如何利用手機遠訓練機器學習模型

手機端和電腦端的反饋:

如何利用手機遠訓練機器學習模型

如何利用手機遠訓練機器學習模型

但電腦端的腳本依然處於監聽狀態,一旦接收到“調參”,依然會準備進入調參模式:

如何利用手機遠訓練機器學習模型


分享到:


相關文章: