当前位置: 首页 > 后端技术 > Python

Keras简介(六)模型训练实时可视化

时间:2023-03-26 14:31:20 Python

在北京做某项目时,客户要求能够对数据进行训练和预测,同时导出模型,并展示训练结果页面上的进度。前面的需求实现起来并不难,但是笔者并没有实现页面显示的训练进度。本文将分享如何在Keras中实时可视化模型训练的过程。幸运的是,已经有人为我们做到了这一点。这个项目叫做hualos,Github的访问地址是:https://github.com/fchollet/h...,作者是Fran?oisChollet和EderSantana,前任作者是Keras的创建者和作者本书《Deep Learning with Python》。大神的作品大大方便了我们的使用。调用项目只需要三行代码,如下:fromkerasimportcallbacksremote=callbacks.RemoteMonitor(root='http://localhost:9000')model.fit(X_train,Y_train,batch_size=batch_size,nb_epoch=nb_epoch,validation_data=(X_test,Y_test),callbacks=[remote])本项目使用Python2编写,使用的第三方模块为Flask和gevent,其中Flask为web端框架,gevent用于并发。使用的JavaScript第三方模块是D3.js和C3.js。这个项目使用起来很方便,直接切换到hualos项目所在文件夹,然后pythonapi.py即可。下面将介绍如何使用它。我们的项目结构如下:hualos可以直接从Github上克隆。作者略微修改了代码和HTML网页以供自己使用。model_train.py是Keras模型训练脚本,iris.csv是大名鼎鼎的鸢尾花数据集。在model_train.py中,Keras用于构建一个简单的DNN模型来训练和预测鸢尾花数据集。在Keras简介(一)构建深度神经网络(DNN)解决多分类问题一文中已经给出了该模型的介绍。完整代码如下:#importmoduleimportnumpyasnpiimportkerasasKimporttensorflowastfimportpandasasppdffromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportLabelBinarizerfromkerasimportcallbacks#读取CSV数据集拆分成训练集进行测试set#这个函数的传入参数是CSV_FILE_PATH:csv文件路径defload_data(CSV_FILE_PATH):IRIS=pd.read_csv(CSV_FILE_PATH)target_var='class'#目标变量#数据集的特征features=list(IRIS.columns)features.remove(target_var)#目标变量的类别Class=IRIS[target_var].unique()#目标变量的类别字典Class_dict=dict(zip(Class,range(len(Class))))#添加target的一列,目标变量EncodingIRIS['target']=IRIS[target_var].apply(lambdax:Class_dict[x])#对目标变量进行0-1编码(One-hotEncoding)lb=LabelBinarizer()lb.fit(list(Class_dict.values()))transformed_labels=lb.transform(IRIS['target'])y_bin_labels=[]#0-1多类别编码变量foriinrange(transformed_labels.shape[1]):y_bin_labels.append('y'+str(i))IRIS['y'+str(i)]=transformed_labels[:,i]#将数据集划分为训练集和测试集train_x,test_x,train_y,test_y=train_test_split(IRIS[features],IRIS[y_bin_labels],\train_size=0.7,test_size=0.3,random_state=0)returntrain_x,test_x,train_y,test_y,Class_dictif'__name__==':#0.Startprint("\nIrisdatasetusingKeras")np.random.seed(4)tf.set_random_seed(13)#1.读取CSV数据集print("LoadingIrisdataintomemory")CSV_FILE_PATH='iris.csv'train_x,test_x,train_y,test_y,Class_dict=load_data(CSV_FILE_PATH)#2.定义模型init=K.initializers.glorot_uniform(seed=1)simple_adam=K.optimizers.Adam()model=K.models.Sequential()model.add(K.layers.Dense(units=5,input_dim=4,kernel_initializer=init,activation='relu'))model.add(K.layers.Dense(units=6,kernel_initializer=init,activation='relu'))model.add(K.layers.Dense(units=3,kernel_initializer=init,activation='softmax'))model.compile(loss='categorical_crossentropy',optimizer=simple_adam,metrics=['accuracy'])#3.训练模型b_size=1max_epochs=100print("Startingtraining")remote=callbacks.RemoteMonitor(root='http://localhost:9000')h=model.fit(train_x,train_y,validation_data=(test_x,test_y),batch_size=b_size,epochs=max_epochs,shuffle=True,verbose=1,callbacks=[remote])print("Trainingfinished\n")#4.评价模型eval=model.evaluate(test_x,test_y,verbose=0)print("对测试数据的评估:loss=%0.6faccuracy=%0.2f%%\n"\%(eval[0],eval[1]*100))#5.使用模型进行预测np.set_printoptions(precision=4)unknown=np.array([[6.1,3.1,5.1,1.1]],dtype=np.float32)predicted=model.predict(unknown)print(“使用模型预测特征的物种:”)打印(未知wn)print("\n预测的softmax向量是:")print(predicted)species_dict={v:kfork,vinClass_dict.items()}print("\n预测的物种是:")print(species_dict[np.argmax(predicted)])我们切换到hualos文件夹,运行pythonapi.py,然后用Python3运行model_train.py文件,在浏览器中输入网址:http://localhost:9000,就可以看到网页了如图所示模型训练实现的可视化结果,图片如下:由于这里无法给出视频,需要观看视频的读者可以到网址:https://mp.weixin.qq。com/s?__biz=MzU2NTYyMDk5MQ==&mid=2247484522&idx=1&sn=dab46a55945baf2411e30bd109cee76f&chksm=fcb9bdfacbce34ec02f3e958988e9b400676d29f88c1efad5ce01fb1f4ce2f5f96ccf0e4af66&token=1377830530&lang=zh_CN#rd??本项目的Github地址为:https://github.com/percent4/keras_train_visualization。??Thisistheendofthissharing,谢谢阅读~