表示通过将类概率向量的序列与表示目标类的索引序列进行比较来计算连接时间分类损失的网络层.
CTCLossLayer
表示通过将类概率向量的序列与表示目标类的索引序列进行比较来计算连接时间分类损失的网络层.
更多信息和选项
- CTCLossLayer[] 表示一个网络,接受表示向量序列的输入矩阵和表示整数序列的目标向量并输出一个实数.
- CTCLossLayer 一般用在 NetGraph 中.
- CTCLossLayer 展示以下用于 NetGraph 等的端口:
-
"Input" 大小为 c+1 的概率向量序列 "Target" 介于 1 和 c 之间的整数序列 "Output" 实数 - 该层定义基于 Graves 等人于 2006 年发表的文章 "Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks".
- 输入应该是大小为 c+1 的概率向量序列,每个向量的总和为 1. 每个向量的最后一个元素表示特殊空类的概率,其他元素表示索引类 1 到 c 的概率. 目标是介于 1 和 c 之间的整数序列. 目标序列不能长于输入序列.
- CTCLossLayer[…][<|"Input"in,"Target"target|>] 根据应用的层明确计算输出.
- CTCLossLayer[…][<|"Input"->{in1,in2,…},"Target"->{target1,target2,…}|>] 为每个 ini 和 targeti 明确计算输出.
- 当 NumericArray 作为输入时,输出将是 NumericArray.
- 输入的大小通常是在 NetGraph 内自动推断的.
- CTCLossLayer[n,"Input"ishape,"Target"tshape] 允许指定输入和目标的形状. ishape 的可能形式为:
-
NetEncoder[…] 产生向量序列的编码器 {len,c+1} len 长度-(c+1) 向量的序列 {len,Automatic} len 向量的序列,它的长度是被推断的 {"Varying",c+1} 向量的可变数,每个长度为 c+1 {"Varying",Automatic} 向量的可变数,每个为推断的长度 - tshape 的可能格式为:
-
NetEncoder[…] 产生整数序列的编码器 {len2} len2 整数序列 {"Varying"} 整数的可变数 RepeatingElement[Restricted[Integer,c]] 在范围 1 到 c 之间整数的可变数 - Options[CTCLossLayer] 给出构造层的默认选项列表. Options[CTCLossLayer[…]] 提供用于在某些数据上运算网络层的默认选项列表.
- Information[CTCLossLayer[…]] 提供有关该层的报告.
- Information[CTCLossLayer[…],prop] 给出 CTCLossLayer[…] 的属性 prop 的值. 可能的属性与 NetGraph 相同.
范例
打开所有单元 关闭所有单元基本范例 (2)
创建一个 CTCLossLayer 对象:
CTCLossLayer[]创建一个 CTCLossLayer,其中输入是一个矩阵,它的行是概率向量,目标是索引向量:
loss = CTCLossLayer[]loss[<|"Input" -> {{0.1, 0.2, 0.7}, {0.4, 0.2, 0.4}, {0.3, 0.5, 0.2}}, "Target" -> {1, 2}|>]应用 (1)
训练一个网络,对图像中的字符向量进行分类. 首先生成训练和测试数据,其中包括单词的图像和相应的单词的字符串:
imgMap = <|" " -> [image], "a" -> [image], "b" -> [image], "c" -> [image], "d" -> [image], "e" -> [image], "f" -> [image], "g" -> [image], "h" -> [image], "i" -> [image], "j" -> [image], "k" -> [image], "l" -> [image], "m" -> [image], "n" -> [image], "o" -> [image], "p" -> [image], "q" -> [image], "r" -> [image], "s" -> [image], "t" -> [image], "u" -> [image], "v" -> [image], "w" -> [image], "x" -> [image], "y" -> [image], "z" -> [image]|>;maxLen = 7;
wordList = ToLowerCase[Select[WordList[Language -> "English"], StringLength[#] ≤ maxLen && LetterQ[#]&]];
SeedRandom[1234];
wordList = RandomSample[StringPadRight[wordList, maxLen]];
dataset = Dataset@Map[<|"Input" -> ImageAssemble[Lookup[imgMap, Characters[#]]], "Output" -> StringTrim[#]|>&, wordList];{testData, trainData} = TakeDrop[dataset, Ceiling[Length[dataset] / 10]];取出培训集的 RandomSample:
RandomSample[trainData, 4]chars = CharacterRange["a", "z"]decoder = NetDecoder[{"CTCBeamSearch", chars, "BeamSize" -> 50}]定义一个网络,接受一幅图像,然后将宽度维度视为序列维度. 接着生成一个矩阵,它的行是宽度维度的概率向量:
ocrNet = NetChain[{ConvolutionLayer[20, 3], BatchNormalizationLayer[], Ramp, PoolingLayer[2], ConvolutionLayer[15, 3], BatchNormalizationLayer[], Ramp, PoolingLayer[2], FlattenLayer[1], TransposeLayer[], GatedRecurrentLayer[19], GatedRecurrentLayer[19], NetMapOperator[LinearLayer[Length[chars] + 1]], SoftmaxLayer[]}, "Input" -> NetEncoder[{"Image", {63, 15}, "Grayscale"}], "Output" -> decoder]用字符 NetEncoder 附加在目标端口上定义一个 CTCLossLayer:
loss = CTCLossLayer["Target" -> NetEncoder[{"Characters", chars}]]trainNet = NetTrain[ocrNet, trainData, LossFunction -> loss, MaxTrainingRounds -> 20, ValidationSet -> testData]testIms = Normal@testData[1 ;; 3, "Input"]trainNet[testIms]trainNet[[image], {"TopNegativeLogLikelihoods", 5}]技术笔记
相关指南
-
▪
- 神经网络的编码和解码数据 ▪
- 神经网络层 ▪
- 语音计算
文本
Wolfram Research (2018),CTCLossLayer,Wolfram 语言函数,https://reference.wolfram.com/language/ref/CTCLossLayer.html.
CMS
Wolfram 语言. 2018. "CTCLossLayer." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/CTCLossLayer.html.
APA
Wolfram 语言. (2018). CTCLossLayer. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/CTCLossLayer.html 年
BibTeX
@misc{reference.wolfram_2026_ctclosslayer, author="Wolfram Research", title="{CTCLossLayer}", year="2018", howpublished="\url{https://reference.wolfram.com/language/ref/CTCLossLayer.html}", note=[Accessed: 06-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_ctclosslayer, organization={Wolfram Research}, title={CTCLossLayer}, year={2018}, url={https://reference.wolfram.com/language/ref/CTCLossLayer.html}, note=[Accessed: 06-September-2026]}