SKIL/工作流程/在实验中训练模型

2023-10-21 16:50

本文主要是介绍SKIL/工作流程/在实验中训练模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在实验中训练模型

如果你想跟踪结果并进行可重复的评估,实验对于训练模型很有用。一旦你学习了工作间,笔记本和进行实验的基本知识你就准备好用SKIL练一个模型了。


先决条件
这个文档假设你已经设置了一个工作间并在SKIL中创建了一个新的实验。创建实验后,打开“笔记本”选项卡,该选项卡将显示scala的模板笔记本,其中已设置导入和结构化训练代码。

如果你不打算动态加载任何其他依赖项,可以单击工具栏左上角的“play”按钮(形状像一个侧面三角形),以评估模板笔记本中的所有单元,并将SkilContext和deeplearning4j库放到作用域中。
如果你喜欢使用其他库,SKIL已将TensorFlow和Keras预先打包。更多信息请参见实验中的TensorFlow。

 

典型工作流程

为训练而设置的笔记本通常遵循此工作流程:

  1. 将第一个和顶部单元用于动态依赖项(可选)。
  2. 把所有常见的导入放在最上面。
  3. 实例化SkilContext并引用SkilContext.client。
  4. 添加用于加载、拆分和转换数据集的代码。
  5. 编写深度学习模型配置和超参数。
  6. 把数据传入Model.fit() 或者,如果使用多GPU,传入 ParallelWrapper.fit.
  7. 使用测试/验证/维持数据集评估模型。
  8. 将经过训练的模型和评估结果传递给SkilContext进行存储。

 

样例代码
TensorFlow、多个Keras后端和Deeplarning4J是默认情况下可用的深度学习框架。下面的示例代码使用scala语言和deeplearning4j。如果要完全下载示例笔记本,建议使用uci_quickstart_notebook.json。
如果要使用外部库,请使用笔记本第一个单元格中的%spark.dep解释器预加载要在笔记本中使用的任何依赖项。

 

%spark.dep//清除以前添加的项目和仓库
z.reset() // 添加maven仓库
z.addRepo("RepoName").url("RepoURL")// 添加Maven快照仓库
z.addRepo("RepoName").url("RepoURL").snapshot()// 添加私有Maven仓库的凭据
z.addRepo("RepoName").url("RepoURL").username("username").password("password")// 从文件系统添加项目
z.load("/path/to.jar")

在配置模型或运行代码之前,需要将必要的类导入作用域。通常,这涉及到deeplarning4j及其一些实用程序库(如ND4J和DataVec)的导入。还要记住导入SKIL实用程序,以便将模型和评估保存到SKIL存储。下面的代码拥有训练LSTM序列分类器所需要的一切。

import scala.collection.JavaConversions._import io.skymind.zeppelin.utils._
import io.skymind.modelproviders.history.client.ModelHistoryClient
import io.skymind.modelproviders.history.model._import org.deeplearning4j.datasets.iterator._
import org.deeplearning4j.datasets.iterator.impl._
import org.deeplearning4j.nn.api._
import org.deeplearning4j.nn.multilayer._
import org.deeplearning4j.nn.graph._
import org.deeplearning4j.nn.conf._
import org.deeplearning4j.nn.conf.inputs._
import org.deeplearning4j.nn.conf.layers._
import org.deeplearning4j.nn.conf.graph.rnn.LastTimeStepVertex
import org.deeplearning4j.nn.weights._
import org.deeplearning4j.optimize.listeners._
import org.deeplearning4j.api.storage.impl.RemoteUIStatsStorageRouter
import org.deeplearning4j.ui.stats.StatsListener
import org.deeplearning4j.datasets.datavec.RecordReaderMultiDataSetIterator
import org.deeplearning4j.eval.Evaluationimport org.datavec.api.transform._
import org.datavec.api.records.reader.RecordReader
import org.datavec.api.records.reader.SequenceRecordReader
import org.datavec.api.records.reader.impl.csv.CSVRecordReader
import org.datavec.api.records.reader.impl.csv.CSVSequenceRecordReader
import org.datavec.api.split.NumberedFileInputSplitimport org.nd4j.linalg.activations.Activation
import org.nd4j.linalg.learning.config._
import org.nd4j.linalg.lossfunctions.LossFunctions._
import org.nd4j.linalg.factory.Nd4j
import org.nd4j.linalg.primitives.Pair
import org.nd4j.linalg.dataset.api.iterator.MultiDataSetIterator
import org.nd4j.linalg.dataset.api.preprocessor.MultiDataNormalization
import org.nd4j.linalg.dataset.api.preprocessor.MultiNormalizerStandardize
import org.nd4j.linalg.util.ArrayUtilimport java.io.File
import java.net.URL
import java.util.ArrayList
import java.util.Collections
import java.util.List
import java.util.Random

假设你已将数据集序列保存到单独的特征和标签文件中,则可以定义一个CSVSequenceRecordReader。它使用RecordReader基类从csv文件中提取单个序列。最后,在使用神经网络中的数据之前,必须将RecordReader传递给一个扩展DataSetIterator的类。这允许预取和批处理你的训练。

 

val trainFeatures: SequenceRecordReader = new CSVSequenceRecordReader()
trainFeatures.initialize(new NumberedFileInputSplit(featuresDirTrain.getAbsolutePath + "/%d.csv",0,449))val trainLabels: RecordReader = new CSVRecordReader()
trainLabels.initialize(new NumberedFileInputSplit(labelsDirTrain.getAbsolutePath + "/%d.csv",0,449))val minibatch: Int = 10
val numLabelClasses: Int = 6val trainData: MultiDataSetIterator = new RecordReaderMultiDataSetIterator.Builder(minibatch).addSequenceReader("features", trainFeatures).addReader("labels", trainLabels).addInput("features").addOutputOneHot("labels", 0, numLabelClasses).build()

 

最后,初始化网络配置。Deeplarning4J公开了一个称为MultiLayerNetwork的简单接口,并且一个更复杂的配置ComputationGraph可用于多个输入和输出。它们类似于Keras中的两个API,ComputationGraph的工作原理与TensorFlow自己的配置非常相似。
配置网络时,必须首先使用NeuralNetConfiguration Builder定义层、输入、输出和其他超参数。然后传递到ComputationGraphMultiLayerNetwork类,不要忘记调用init()

val conf: ComputationGraphConfiguration = new NeuralNetConfiguration.Builder().seed(123).optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).weightInit(WeightInit.XAVIER).updater(new Nesterovs(0.005, 0.9)).gradientNormalization(GradientNormalization.ClipElementWiseAbsoluteValue).gradientNormalizationThreshold(0.5).graphBuilder().addInputs("input").setInputTypes(InputType.recurrent(1)).addLayer("lstm", new GravesLSTM.Builder().activation(Activation.TANH).nIn(1).nOut(10).build(), "input").addVertex("pool", new LastTimeStepVertex("input"), "lstm").addLayer("output", new OutputLayer.Builder(LossFunction.MCXENT).activation(Activation.SOFTMAX).nIn(10).nOut(numLabelClasses).build(), "pool").setOutputs("output").pretrain(false).backprop(true).build()val network_model: ComputationGraph = new ComputationGraph(conf)
network_model.init()

Training the network is fairly simple. You can either use a MultipleEpochsIteratorincluded with Deeplearning4j or manually iterate through each epoch if you prefer to perform other operations such as evaluation.

训练网络相当简单。如果你愿意执行其他操作(如评估),可以使用MultipleEpochsIterator(包括deeplarming4j),也可以手动迭代每个epoch。

for (i <- 0 until nEpochs) {network_model.fit(trainData)// 在测试集上评估:val evaluation = eval(testData)var accuracy = evaluation.accuracy()var f1 = evaluation.f1()println(s"Test set evaluation at epoch $i: Accuracy = $accuracy, F1 = $f1")testData.reset()trainData.reset()
}

Certain datasets might require more complex evaluation. The code below shows you how to create an evaluation method that returns an Evaluation class which is compatible with SKIL's model storage system.

某些数据集可能需要更复杂的评估。下面的代码向你展示了如何创建一个返回与SKIL's的模型存储系统兼容的evaluation类的评估方法。

def eval(it:MultiDataSetIterator) : Evaluation = {val evaluation = new Evaluation(numLabelClasses)it.reset()while (it.hasNext()) {val ds = it.next()val prediction = network_model.outputSingle(ds.getFeatures(0))evaluation.eval(ds.getLabels(0), prediction)}return evaluation
}

最后,使用SkilContext类将模型上传到SKIL并附加评估结果。

var evaluation = eval(testData)
val modelId = skilContext.addModelToExperiment(z, network_model)
val evalId = skilContext.addEvaluationToModel(z, modelId, evaluation)

 

这篇关于SKIL/工作流程/在实验中训练模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/255671

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

上个月,FLUX 席卷了互联网,这并非没有原因。他们声称优于 DALLE 3、Ideogram 和 Stable Diffusion 3 等模型,而这一点已被证明是有依据的。随着越来越多的流行图像生成工具(如 Stable Diffusion Web UI Forge 和 ComyUI)开始支持这些模型,FLUX 在 Stable Diffusion 领域的扩展将会持续下去。 自 FLU