服务热线
131-1198-7613
“
天清
PaperWeekly 互换二群群友
关注音乐生成和量化生意营业
创意泉源
深度进修操练是一个很是耗时、死板的过程:一次操练少则几个小时,多则数天,并且半途强人为干预的机缘更是少之又少,在大部门时间里能做的只有等候。
不少人都有这样欺压症,剧本最先运行后会不绝的看正确率和loss,就像像球迷看球赛、股民盯报价一样刺激。日常来说,想要监控深度进修操练,只能操纵 ssh 或许 Tensorboard。一旦须要外出,只能通过手机监控深度进修,利用很是麻烦,于是只能无奈地守在电脑前空耗生命。
我们急需一种举措能够将我们从电脑前解放,让监控深度进修变得简朴利便,不再受时间、空间沉寂台的限制。在当今社会,有什么器材是在任何时间任何所在我们都能操纵的呢?谜底只有一个:微信。
微信是每个中国人接入社会的重要接口,我们用微信在地铁上看鸡汤、在商场操纵电子支出、瘫在沙发上刷朋侪圈……总之,微信几乎包揽了我们保存中的一切,让人产生一种错觉,在不久的未来手机上只须要装微信一个软件就够了。那么,如果微信能把监控深度进修也包揽了岂不是妙哉?
在知乎上看到@Coldwings - 操纵微信监管你的TF操练(https://zhuanlan.zhihu.com/p/25597975?group_id=822180572054048768)的用微信监控 Tensorflow 操练的项目,很受启发,决定开发一款用微信监控 Keras 操练的插件。接待 fork 这个项目的 GitHub:https://github.com/QuantumLiu/wechat_callback。
道理介绍
本插件基于 python3.5,python2.7 须要将_thread 改为 thread。当 import 程序文件时,将首先通过 ItChat(https://github.com/littlecodersh/ItChat)在办事器扫码登录微信(网页版)。
插件的主体是 sendmessage(),一个 Keras 的 keras.callbacks.Callback() 类,操练时被传入 fit() 方法的 callbacklist。在 on_train_begin(self, logs={}) 时,操纵 @itchat.msg_register(TEXT) 注册针对不同下令的响应方法,启动新线程最先实时监控下令。
对下令的识别采纳的是 python 的 if any((k in text) for k in cmdlist): 方法,即只要发送的新闻内容包含合适前提的要害词即可出发,冗余字符不影响下令的触发。
操练过程中,由手机微信与“文件传输助手”间的通信来实现下令的传达与内容反馈。
如图,“获取图表{batches}”和“gpu[MEMORY TEMPERATURE]”是操纵者本人发送的下令,办事器响应下令,以给文件助手发送新闻的方式反馈内容(图表、陈诉和状况)。
紧张功能
如今已经实现了被动监控、自动查询、远程关机/禁止操练等多项功能。
1. 实时监控:在每个epoch结束后,自动发送本epoch操练信息以及两张别离代表所有batch和epoch信息的图表至文件传输助手。
2. 自动查询:在操练最先后的尽情时辰,发送特定花样的指令,可获得指定查询项的信息。如今支撑 batch 和 epoch 的各个指标的信息、显卡状况信息。
3. 远程节制:当你觉得操练已经收敛,或许因任何缘故因由须要禁止操练时,可以优雅地截止操练以致关机。Keras 的 fit 方法中,可以通过在 callback 配置 self.model.stop_training = True 来实如今当前 epoch 结束时截止操练,不然只能 Ctrl+C 暴力禁止。操纵本插件,可以操纵出格花样的指令来指定禁止 epoch、当即禁止操练,以致关机和作废关机。
例子与教学1. 预备工作
git clone https://github.com/QuantumLiu/wechat_callback.git
cd wechat_callback
须要用到的库:itchat, keras, numpy, scipy, matplotlib, _thread(py3)
请确保 nvidia-smi 可用,如果 windows 的 cmd 里找不到下令,请手动将 nvidia-smi.exe 所在位置添加进情况变量。
2. 运行测试剧本
python wechat_test.py
阐明:
在 wechat_test.py 的开头,首先 import wechat_utils
import wechat_utils #will login automaticly
#wechat_utils.sendmessage()isthe callback class
#wechat_utils.sendmessage()是 keras 的回调类,fit 时传入 callbacklist
在 wechat_utils.py 中:
# Automaticly login when imported
#在被import时自动登录
#==============================================================================
itchat.auto_login(enableCmdQR=0.5,hotReload=True)
itchat.dump_login_status()#dump
可以看到,当 wechat_utils 被 import 时会挪用 itchat.auto_login(),不出意外的话,将会在下令行表示二维码,须要操纵手机微信扫码登录你的微信账号。
在测试剧本里我操纵 numpy.random 来生成操练数据,搭建了一个多层的 FC 收集
model = Sequential()model.add(Dense(2048, input_dim=784))model.add(Activation('relu'))for i in range(9):model.add(Dense(2048))model.add(Activation('relu'))model.add(Dense(1,activation='sigmoid'))x=np.random.rand(nb_sample,dim) y=np.random.randint(2,size=(nb_sample,1))
挪用插件很是简朴,只须要在 fit 时把 wechat_utils.sendmessage() 这个 keras 的 Callback 类传入 Callbacklist。
model.fit(x=train_x,y=train_y,batch_size=batch_size,nb_epoch=60,validation_data=(val_x,val_y),callbacks=[wechat_utils.sendmessage()])
于是操练最先,手机缘收到如下反馈:
如今,我们可以向它发送查询指令,指令日常包含要害词和参数,以获取图表为例,包含以下尽情要害词将被识别为获取图表指令:
[u'获取图表','Show me the figure']
参数则用{}或[]来指定,所有的指令均支撑不指定参数,获取图表的默认参数是查询所有信息,例如:
‘Show me the figure’ 触发了指令,{batches} 表示查询 batches 级别信息,[losshinge] 表示查询 loss 和 hinge 指标(日常的,统一属性参数用空格隔开)。
同理,['GPU','gpu',u'显卡'] 是 gpu 状况查询的要害词,用[]指定参数,如图,查询了 gpu 的显存和温度。GPU 参数是凭据 nvidia-smi 的预置参数确定的,所有都是大写,详细可查询属性请看 GitHub 的 readme 或许阅读源码。
关机指令要害词是 [u'关机','Shut down','Shut down the computer',u'别挥霍电了',u'洗洗睡吧'],操纵 {sec} 和 [name] 指定等候时间和保存文件名,文件名不包含.h5。默认保存模型,如果不想保存,可以在新闻中包含 [u'不保存模型',"don't save"] 好比:
Shut down now{120},don't save
作废关机只须要包含 [u'作废','cancel','aaaa'] 就可以了,也就是说如果着急的话打一串 a 发过去也是可以的。
当即禁止操练的要害词是 ['Stopnow',"That's enough",u'禁止操练',u'放弃治疗'] (《西部全国》看多了)。
指定禁止 epoch 的要害词是 ‘Stop at’,参数可以直接用整数表示,不须要 []。
下令与要害词列表
1. 远程禁止操练
要害词列表:
['Stop now',"That'senough",u'禁止操练',u'放弃治疗']
分析:发送的新闻中包含尽情一项都可触发下令。将在当前epoch结束后禁止操练。无参数。
2. 远程关机
要害词列表:
[u'关机','Shut down','Shut down the computer',u'别挥霍电了',u'洗洗睡吧']
分析:发在指定秒数后关机,用 {sec} 和 [name] 指定参数等候时间和保存文件名,文件名不包含 .h5。如果同时包含 [u'不保存模型',"don't save"],则不会保存模型。例:发送 'Shut down now [test]{120}',电脑将在 120 秒后关机,将模型保存为 test.h5。若发送 'Shut down now{120},don't save',则模型将不会被保存。
3. 作废关机
要害词列表:
[u'作废','cancel','aaaa']
分析:发送的新闻中包含尽情一项都可触发下令。无参数。
4. 获取图表
要害词列表:
[u'获取图表','Show me the figure']
分析:发送的新闻中包含尽情一项都可触发下令。通过[metrics] 和{level} 指定参数,如果没有指定则皆默觉得’all'。例:手机发送"获取图表[loss]{batches}",会收到一个 jpg 花样的 loss 随 batches 厘革的图片。手机发送"获取图表",则会获得两张图片,别离是所有指标随 batch 和 epoch 的厘革。
5. 指定操练禁止轮数
要害词列表:
'Stop at '
参数可以直接用整数表示,不须要 []。例:手机发送“Stop at:8”,操练将在 epoch8 完成后禁止。
6. 查询显卡状况
要害词列表:
['GPU','gpu',u'显卡']
参数操纵 [TYPE] 来指定,GPU 参数是凭据 nvidia-smi 的预置参数确定的,所有都是大写,在 [] 内用空格分隔。
可用参数列表:
['MEMORY', 'UTILIZATION', 'ECC', 'TEMPERATURE','POWER', 'CLOCK', 'COMPUTE', 'PIDS', 'PERFORMANCE','SUPPORTED_CLOCKS,PAGE_RETIREMENT', 'ACCOUNTING']
例:发送'gpu[MEMORY]'或许'显卡[MEMORY]'查询显存操纵;发送'GPU[MEMORYTEMPERATURE]'查询显存和温度。
总结
这个项目从有设法算起到写诠释、开 GitHub、写知乎不过两天半,做的很慌忙也很粗拙,出格是绘图的细节和多线程的处置惩罚处罚。
我只是一名阿语专业大一弟子(休学ing),水平很是有限,恳请各位多加教导,前进我的姿势水平,如果这个项目能给你带来一点点便利或许灵感,那么我将感到很是侥幸与欣慰。
再次感谢 @Coldwings 的原创创意。
2024-03-20
网页设计,是根据企业希望向浏览者传递的信息(包括产品、服务、理念、文化),进行网站功能策划,然后进行···
2024-03-19
网页设计,是根据企业希望向浏览者传递的信息(包括产品、服务、理念、文化),进行网站功能策划,然后进行···
2024-03-19
网页设计,是根据企业希望向浏览者传递的信息(包括产品、服务、理念、文化),进行网站功能策划,然后进行···
2024-03-19
网页设计,是根据企业希望向浏览者传递的信息(包括产品、服务、理念、文化),进行网站功能策划,然后进行···