云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

云服务器_服务器密码是什么_

小七 141 0

如何使用MLflow实验Keras网络模型:电影评论的二元分类

我们可以在最后一个开源的mlease平台上为您演示了一个机器学习流程。特别是,我们使用MLflow和PyCharm演示了一个简单的Keras/TensorFlow模型。这一次我们探索了一个二元分类Keras网络模型。使用MLflow的跟踪api,我们将在训练和验证过程中,从基线和实验模型之间的运行来跟踪度量的准确性和损失。与之前一样,我们将使用PyCharm和localhost来运行所有实验。IMDB电影评论的二值分类二元分类是一个常见的机器学习问题,你想把结果分成两个不同的类,尤其是情感分类。在这个例子中,我们将通过检查电影评论的文本内容,来将电影评论分为"积极的"或"消极的"评论,通过检查评论的文本内容来发现表达情感的常用词。Keras网络示例代码主要借鉴了fraçois Chollet的"使用Python进行深度学习",对其进行了模块化和修改,使之成为一个MLFlow项目,并结合MLFlow跟踪API来记录参数、度量和工件。方法与实验互联网电影数据库(IMDB)与Keras一起打包;它是一组50000部受欢迎的电影,分成25000个用于培训的评论和25000个用于验证的评论,其中"积极"和"消极"情绪分布均匀。我们将使用这个数据集来训练和验证我们的a模型。通过简单的数据准备,我们可以将这些数据转换成张量,作为numpy数组,以便我们的Keras神经网络模型进行处理。(读取和准备数据的代码在模块中:data-utils_nn.py公司.)我们将创建两个Keras神经网络模型基线和实验,并在我们的数据集上训练它们。当基线模型保持不变时,我们将对两个实验模型进行实验,通过提供不同的调谐参数和损耗函数来比较结果。这就是MLflow的跟踪组件极大地帮助我们评估在我们的模型中,哪些参数产生了最好的度量。让我们首先检查基线模型。基线模型:Keras神经网络性能来源:Python深度学习francois的代码示例使用这个Keras网络体系结构来进行二进制分类。它由三个密集层组成:一个隐藏层(16个单元)、一个输入层(16个单元)和一个输出层(1个单元),如图所示隐藏单元是层的表示空间中的一个维度,"Chollet写道,其中16对于这个问题空间来说已经足够了;对于像图像分类这样的复杂问题,我们总是可以增加单元或添加隐藏层来进行实验,观察其对精度和损失度量的影响(我们将在下面的实验中进行)。当输入层和隐藏层使用relu作为激活函数时,最终输出层使用sigmoid将结果压缩成介于[0,1]之间的概率。接近1的值表示正值,低于0.5的值表示负值。使用这个推荐的基线架构,我们训练我们的基本模型并记录所有参数、度量和工件。这段代码来自模块模型_nn.py公司,创建如上图所示的密集层堆栈。....定义构建基本模型(自我):基本型号=模型。顺序()基地_模型.add(分层。密实(16,activation='relu',输入形状=(10000,))基地_模型.add(分层。密实(16,activation='relu'))基地_模型.add(分层。密实(1,activation='sigmoid'))返回基本型号接下来,在建立模型之后,我们使用适当的损失函数和优化器来编译模型。由于我们期望的最终输出是概率,因此推荐的二进制分类损失函数是二进制的,相应的推荐优化器是rmsprop。模块序列中的代码段_nn.py公司编译我们的模型。从keras导入优化器......如果优化器=='rmsprop':选项=优化器.RMSprop(lr=lr)模型.编译(优化器=opt,loss='binary_crossentry',metrics=['精度'])...最后,我们通过运行迭代或epoch来拟合(训练)和评估,每次迭代的IMDB数据集中有512个样本,使用默认参数:时代=20损失=二进制单位=16隐藏层=1要从命令行运行,请cd到Git存储库目录keras/imdbclassifier,然后运行以下任一操作:python主管道_nn.py公司或者从GitHub repo顶层目录运行:mlflow run keras/imdbclassifier-e主管道或直接从Gitbub:mlflow运行'https://github.com/dmatrix/jsd mlflow examples.git\keras/imdbclassifier'图1:在本地主机上使用基本模型参数的动画运行在运行结束时,该模型将在所有迭代之后打印一组最终的度量,例如训练集和验证集的二进制丢失、二进制错误、验证丢失和有效性。图2:使用基本模型参数运行结果和度量正如您在运行中所注意到的,随着迭代次数的增加,损失会减少,而精度会提高,前者收敛到0,后者向1收敛。我们的最终训练数据(二进制损失)收敛到0.211,验证数据(有效性损失)为0.29,这与二进制损失有一定的关系。另一方面,精确性在几个时期后出现了差异,这表明我们可能与训练数据过度拟合(见下图)。(注意:要访问这些绘图,请启动MLFlow UI,单击任何实验运行,并访问其工件的文件夹。)当使用看不见的IMDB评论进行预测时,预测结果的平均准确率为0.88,这接近我们的验证精度,但仍然相当遥远。然而,正如你所看到的,对于一些评论,网络自信地预测结果,99%的概率是肯定的。图3a:Matplotlib工件记录了基本参数和实验模型参数图3b:Matplotlib工件记录了基本参数和实验模型参数此时,在观察了基本模型度量之后,您可能会问,我们能做得更好吗?我们是否可以调整一些调整参数,如隐藏层数、时代、损失函数或单位,以影响更好的结果。让我们尝试一些推荐的实验。实验模型:Keras神经网络性能MLflow的跟踪组件允许我们使用不同的参数跟踪模型的实验运行,并将它们的度量和工件持久化以供分析。按照Chollet的建议,让我们用以下实验参数启动两次运行,这些参数与默认模型不同,并观察结果:模型单位历元损失函数隐藏层基地1620二元向性1实验-13230二元向性三实验-23220mse公司三表1:型号和参数在本地主机上运行实验因为我们在本地机器上运行MLflow,所以所有结果都被本地记录。但是,您可以通过简单地设置环境变量MLFLOW_tracking_URI或以编程方式设置mlflow.set_跟踪_uri().或者连接到跟踪URI并记录结果。在这两种情况下,URI可以是远程服务器的HTTP/HTTPS URI,也可以是指向目录的本地路径。在本地主机上,URI默认为mlruns目录。用MLFlow在PyCharm中运行实验因为我更喜欢PyCharm开发PyCharm,所以我将在我的笔记本电脑上运行PyCharm中的实验,提供实验参数。下面是第一个实验的动画。(要了解如何在PyCharm中使用MLflow,请阅读我以前的博客)。虽然我通过在PyCharm的运行配置中提供参数来运行这些实验,但是您也可以从顶层目录在命令行上轻松地运行这些实验:mlflow run keras/imdbclassifier-e main-P隐藏层=3-P时期=30mlflow run keras/imdbclassifier-e main-P隐藏层=3-P输出=32-P损失=mse图4:实验1模型参数的动画运行所有实验的运行都会被记录下来,我们可以检查每个指标并比较不同的运行来评估结果。所有使用MLflow跟踪API记录这些工件的代码都在训练中_nn.py公司模块。以下是部分代码片段:....与mlflow.start_运行():#日志参数mlflow.log_参数("隐藏层",args.隐藏层)mlflow.log_参数("输出",参数输出)mlflow.log_参数("时代",年代)mlflow.log_参数("损失函数",自变量损失)#日志度量mlflow.log_度量("二进制损失",ktrain_cls.get_二进制丢失(历史)mlflow.log_度量("二进制编码",ktrain_cls.get_二进制\u acc(历史)mlflow.log_度量("验证损失",ktrain_cls.get_二进制丢失(历史)mlflow.log_度量("验证账户",ktrain_cls.get_验证_acc(历史)mlflow.log_度量("平均损失",结果[0])mlflow.log_度量("平均加速度",结果[1])#记录伪影(matplotlib图像丢失/准确性)mlflow.log_工件(图像方向)#对数模型mlflow.keras.log_模型(keras_型号,型号\u dir)print("损失函数使用",自变量损失)如果"名称"='"主视图":##主要用于测试功能#解析器=KParseArgs()参数=parser.parse_参数()标志=长度(系统argv)==1如果标志:打印("使用默认基线参数")其他:打印("使用实验参数")打印("隐藏层:",args.隐藏层)打印("输出:",参数输出)打印("时代:",年代)打印("损失:",自变量损失)KTrain()。列车型号(args、flag)将实验和结果与MLFlow用户界面进行比较现在是最好的部分。MLflow允许您从MLflow GUI查看所有运行和记录的结果,您可以在其中比较所有三个运行的指标。mlflowv0.5.1中最近对UI的改进为比较运行提供了更好的体验。在loca上启动烧瓶跟踪服务器