训练模型的相关内容如下:
原始形象:MJ初步产出符合设计想法的贴纸原始形象二次加工:完成贴纸的白色边线等细节加工处理素材:给训练集图片打tag,修改tag训练模型:将上述处理好的数据集做成训练集,进行训练
在我们训练模型之前,我们需要一个损失函数。由于这本质上是一个多类分类问题(每个可能的下一个字符是一个类),因此损失将是稀疏的分类交叉熵损失。我们配置这个损失是从logits(不是直接的概率)计算的。一旦我们有了损失,我们就可以编译我们的模型,这意味着我们将损失和优化器联系在一起。优化器将在训练期间更新权重以尽可能减少损失。最后,我们开始训练模型。我们选择了一些我们想要进行训练的时期。一个时期是对数据集的完整传递。我们在这里进行了多次训练,并提供了回调以确保在训练期间保存权重。首先,我们需要从实际的字符串中提取字符序列。为了做到这一点,我们可以使用TensorFlow的TF字符串Unicode拆分功能。例如,此时文本已经被转换为字符序列列表。但是,神经网络不能直接处理这些字符序列。因此,我们需要将这些字符序列转化为数字。为了将每个字符映射到给定的ID,我们可以使用TF Keras层中的StringLookup函数。您只需要将您的词汇表传递给这个函数。在我们的例子中,语料库包含65个独特的字符。我们生成一个层,当字符通过这个层时,它将生成相应的ID。在这个层中,你会有一个从字符到ID的映射。要获得反向映射(即从ID到字符的映射),您可以使用同一层的StringLookup函数,但需要将参数invert设置为True。现在让我们将这些处理后的数据作为神经网络的训练数据集。为此,我们使用TF Data Dataset API。这个API有一个优秀的方法,可以将整个戏剧文本语料库(它代表了大量的实例)作为ID存储,以便获取一个数据集。
call函数指定了整个网络的架构。这里,输入是代表字符的ID序列。我们首先有一个嵌入层,为每个ID创建一个表示向量。这是一个可以训练的层,因此,随着训练的进行,这些向量将开始变得越来越有意义。然后,我们将这些字符的向量表示传递给一个循环层。最后,我们将循环层的输出传递给一个密集层。这个密集层将输出与我们词汇表大小相同的分数,这意味着为65个可能的字符中的每一个打分。这些分数表示该字符是下一个字符的概率。完成模型构建后,我们可以使用model.summary()查看模型的结构。[heading3]创建初始向量层[content]我们有一个第一层,我们将为每个初始状态(init)创建一个表示它的向量。这就是训练层。随着训练的进行,这个向量逐渐开始代表了字符。[heading3]字符向量的演进[content]我们期待这些字符向量将开始变得越来越有意义。这些字符的静态表示将被传递给循环层,在这里我们将以某种方式修改这些表示。根据当前上下文与之前的内容,生成相应的状态,这将是下一步的重用。[heading3]构建密集输出层[content]最后,我们将循环层的输出传递给一个密集层。这个层将输出与我们词汇表中一样多的数字,这意味着为65个可能的字符中的每一个打分。这些分数表示该字符是下一个字符的概率。这就是模型所做的一切。接下来,我们开始实例化这个模型。[heading3]查看和理解模型结构[content]完成后,我们可以使用模型摘要查看模型的结构。在这里,你会看到我们正在构建的层,包括循环层和我们刚刚编码的密集层。这些层已经在我们的模型中实现了。