我经常编写Python脚本来进行数据处理、数据传输和模型训练。随着数据量和数据复杂性的增加,运行脚本可能需要一些时间。在等待数据处理完成时可以同时做一些其他工作。
为了达到这个目的,笔者编写了一组用于解决这个问题的Python脚本。使用这些脚本向手机发送流程更新、可视化和完成通知。当偶尔拥有这些自由的时刻,你可以享受而不是担心模型的进度。
需要什么
第一个问题是,需要知道什么?这取决于你正在做的工作。对于笔者来说主要有有三个可能会占用时间的处理任务:
· 模型训练
· 数据处理和/或传输
· 金融模型
我们 需要 对于每一种情况具体分析。
模型训练
更新每n个epoch,必须包括关键指标。例如,训练和验证集的损失和准确性。接着完成通知,包括:
· 训练期间关键指标的可视化(同样,训练和验证集的损失和准确性)
· 其他不太重要但仍然有用的信息,如本地模型目录、训练时间、模型架构等
· 预测输出,对于文本生成来说输出生成的文本(或它的一个样本);对于图像生成来说,输出结果是一个(希望)很酷的可视化
以训练一个神经网络来重现给定的艺术风格为例。我们需要重点从模型中生成的图像,损失和精度图,当前的训练时间,和一个模型的名称。
import notify
START= datetime.now() # this line would be placed before modeltraining begins
MODELNAME="SynthwaveGAN" # giving us ourmodel name
NOTIFY=100 # so we send an update notification every100 epochs
# for each epoch e,we would include the following code
if e % notify_epoch ==0and e !=0:
# here we createthe email body message
txt = (f"{MODELNAME} update as of "
f"{datetime.now().strftime( %H:%M:%S )}.")
# we build theMIME message object with notify.message
msg = notify.message(
subject= Synthwave GAN ,
text=txt,
img=[
f ../visuals/{MODELNAME}/epoch_{e}_loss.png ,
f ../visuals/{MODELNAME}/epoch_{e}_iter_{i}.png
]
) # note that weattach two images here, the loss plot and
# ...a generated image output from our model
notify.send(msg) # we then send the message
每隔100个epoch,就会发送一封包含上述所有内容的电子邮件。以下是其中一封邮件:
数据处理和传输
这点不是很有趣,但在时间消耗方面,它排第一名。
以使用Python将批量数据上传到SQLServer为例(对于没有BULK INSERT的人)。在上传脚本的最后,会有一个简单的消息通知上传完成。