深度学习常用损失函数介绍

均方差损失(Mean Square Error,MSE)

均方误差损失又称为二次损失、L2损失,常用于回归预测任务中。均方误差函数通过计算预测值和实际值之间距离(即误差)的平方来衡量模型优劣。即预测值和真实值越接近,两者的均方差就越小。

计算方式

假设有 n n n 个训练数据 x i x_i xi,每个训练数据 x i x_i xi 的真实输出为 y i y_i yi,模型对 x i x_i xi 的预测值为 y ^ i \hat{y}_i y^i。该模型在 n n n 个训练数据下所产生的均方误差损失可定义如下:

M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 MSE=\frac{1}{n}\sum_{i=1}^n{\left( y_i-\hat{y}_i \right) ^2} MSE=n1i=1n(yiy^i)2
假设真实目标值为100,预测值在-10000到10000之间,我们绘制MSE函数曲线如 图1 所示。可以看到,当预测值越接近100时,MSE损失值越小。MSE损失的范围为0到 ∞ \infty

在这里插入图片描述

图1 MSE损失示意图

CTC算法

算法背景

CTC 算法主要用来解决神经网络中标签和预测值无法对齐的情况,通常用于文字识别以及语音等序列学习领域。举例来说,在语音识别任务中,我们希望语音片段可以与对应的文本内容一一对应,这样才能方便我们后续的模型训练。但是对齐音频与文本是一件很困难的事,如 图2 所示,每个人的语速都不同,有人说话快,有人说话慢,我们很难按照时序信息将语音序列切分成一个个的字符片段。而手动对齐音频与字符又是一件非常耗时耗力的任务。

在这里插入图片描述

图2 语音识别任务中音频与文本无法对齐

在文本识别领域,由于字符间隔、图像变形等问题,相同的字符也会得到不同的预测结果,所以同样会会遇到标签和预测值无法对齐的情况。如 图3 所示。

在这里插入图片描述

图3 不同表现形式的相同字符示意图

总结来说,假设我们有个输入(如字幅图片或音频信号) X X X ,对应的输出是 Y Y Y ,在序列学习领域,通常会碰到如下难点:

  1. X X X Y Y Y 都是变长的;
  2. X X X Y Y Y 的长度比也是变化的;
  3. X X X Y Y Y 相应的元素之间无法严格对齐。

算法概述

引入CTC主要就是要解决上述问题。这里以文本识别算法CRNN为例,分析CTC的计算方式及作用。CRNN中,整体流程如 图4 所示。

在这里插入图片描述

图4 CRNN整体流程

CRNN中,首先使用CNN提取图片特征,特征图的维度为 m × T m\times T m×T ,特征图 x x x 可以定义为:

x = ( x 1 , x 2 , . . . , x T ) x = (x^1,x^2,...,x^T) x=(x1,x2,...,xT)
然后,将特征图的每一列作为一个时间片送入LSTM中。令 t t t 为代表时间维度的值,且满足 1 < t < T 1<t<T 1<t<T ,则每个时间片可以表示为:

x t = ( x 1 t , x 2 t , . . . , x m t ) x^t = (x_1^t,x_2^t,...,x_m^t) xt=(x1t,x2t,...,xmt)
经过LSTM的计算后,使用softmax获取概率矩阵 y y y ,定义为:

y = ( y 1 , y 2 , . . . , y T ) y = (y^1,y^2,...,y^T) y=(y1,y2,...,yT)
其中,矩阵的每一列 y t y^t yt 定义为:

y t = ( y 1 t , y 2 t , . . . , y n t ) y^t = (y_1^t,y_2^t,...,y_n^t) yt=(y1t,y2t,...,ynt)
n n n 为字符字典的长度,由于 y i t y_i^t yit 是概率,所以 Σ i y i t = 1 \Sigma_i{y_i^t}=1 Σiyit=1 。对每一列 y t y^t yt a r g m a x ( ) argmax() argmax() ,就可以获取每个类别的概率。

考虑到文本区域中字符之间存在间隔,也就是有的位置是没有字符的,所以这里定义分隔符 − - 来表示当前列的对应位置在图像中没有出现字符。用 L L L 代表原始的字符字典,则此时新的字符字典 L ′ L' L 为:

L ′ = L ∪ { − } L' = L \cup \{-\} L=L{}
此时,就回到了我们上文提到的问题上了,由于字符间隔、图像变形等问题,相同的字符可能会得到不同的预测结果。在CTC算法中,定义了 B B B 变换来解决这个问题。 B B B 变换简单来说就是将模型的预测结果去掉分割符以及重复字符(如果同个字符连续出现,则表示只有1个字符,如果中间有分割符,则表示该字符出现多次),使得不同表现形式的相同字符得到统一的结果。如 图5 所示。

在这里插入图片描述

图5 CTC示意图

这里举几个简单的例子便于理解,这里令T为10:

B ( − s − t − a a t t e ) = s t a t e B(-s-t-aatte)=state B(staatte)=state

B ( s s − t − a − t − e ) = s t a t e B(ss-t-a-t-e)=state B(sstate)=state

B ( s s t t − a a t − e ) = s t a t e B(sstt-aat-e)=state B(ssttaate)=state

对于字符中间有分隔符的重复字符则不进行合并:

B ( − s − t − t a t t e ) = s t t a t e B(-s-t-tatte)=sttate B(sttatte)=sttate
当获得LSTM输出后,进行 B B B 变换就可以得到最终结果。由于 B B B 变换并不是一对一的映射,例如上边的3个不同的字符都可以变换为state,所以在LSTM的输入为 x x x 的前提下,CTC的输出为 l l l 的概率应该为:

p ( l ∣ x ) = Σ π ∈ B − 1 ( l ) p ( π ∣ x ) p(l|x) = \Sigma_{\pi\in B^{-1}(l)}p(\pi|x) p(lx)=ΣπB1(l)p(πx)
其中, π \pi π 为LSTM的输出向量, π ∈ B − 1 ( l ) \pi\in B^{-1}(l) πB1(l) 代表所有能通过 B B B 变换得到 l l l π \pi π 的集合。

而对于任意一个 π \pi π ,又有:

p ( π ∣ x ) = Π t = 1 T y π t t p(\pi|x) = \Pi_{t=1}^Ty^t_{\pi_t} p(πx)=Πt=1Tyπtt
其中, y π t t y^t_{\pi_t} yπtt 代表 t t t 时刻 π \pi π 为对应值的概率,这里举一个例子进行说明:

π = − s − t − a a t t e \pi = -s-t-aatte π=staatte

y π t t = y − 1 ∗ y s 2 ∗ y − 3 ∗ y t 4 ∗ y − 5 ∗ y a 6 ∗ y a 7 ∗ y t 8 ∗ y t 9 ∗ y e 1 0 y^t_{\pi_t} = y_-^1*y_s^2*y_-^3*y_t^4*y_-^5*y_a^6*y_a^7*y_t^8*y_t^9*y_e^10 yπtt=y1ys2y3yt4y5ya6ya7yt8yt9ye10

不难理解,使用CTC进行模型训练,本质上就是希望调整参数,使得 p ( π ∣ x ) p(\pi|x) p(πx) 取最大。

交叉熵损失函数

在物理学中,“熵”被用来表示热力学系统所呈现的无序程度。香农将这一概念引入信息论领域,提出了“信息熵”概念,通过对数函数来测量信息的不确定性。

交叉熵(cross entropy)是信息论中的重要概念,主要用来度量两个概率分布间的差异。假定 p p p q q q 是数据 x x x 的两个概率分布,通过 q q q 来表示 p p p 的交叉熵可如下计算:

H ( p , q ) = − ∑ x p ( x ) log ⁡ q ( x ) H\left( p,q \right) =-\sum_x{p\left( x \right) \log q\left( x \right)} H(p,q)=xp(x)logq(x)

交叉熵刻画了两个概率分布之间的距离,旨在描绘通过概率分布 q q q 来表达概率分布 p p p 的困难程度。根据公式不难理解,交叉熵越小,两个概率分布 p p p q q q 越接近。

这里仍然以三类分类问题为例,假设数据 x x x 属于类别 1 1 1。记数据x的类别分布概率为 y y y,显然 y = ( 1 , 0 , 0 ) y=(1,0,0) y=(1,0,0)代表数据 x x x 的实际类别分布概率。记 y ^ \hat{y} y^ 代表模型预测所得类别分布概率。

那么对于数据 x x x 而言,其实际类别分布概率 y y y 和模型预测类别分布概率 y ^ \hat{y} y^ 的交叉熵损失函数定义为:

c r o s s   e n t r o p y = − y × log ⁡ ( y ^ ) cross\ entropy=-y\times \log \left( \hat{y} \right) cross entropy=y×log(y^)

很显然,一个良好的神经网络要尽量保证对于每一个输入数据,神经网络所预测类别分布概率与实际类别分布概率之间的差距越小越好,即交叉熵越小越好。于是,可将交叉熵作为损失函数来训练神经网络。

在这里插入图片描述

图6 三类分类问题中输入x的交叉熵损失示意图(x 属于第一类)

图6 给出了一个三个类别分类的例子。由于输入数据 x x x 属于类别 1 1 1,因此其实际类别概率分布值为 y = ( y 1 , y 2 , y 3 ) = ( 1 , 0 , 0 ) y=(y_1,y_2,y_3)=(1,0,0) y=(y1,y2,y3)=(1,0,0)。经过神经网络的变换,得到了输入数据 x x x 相对于三个类别的预测中间值 ( z 1 , z 2 , z 3 ) (z1,z2,z3) (z1,z2,z3)。然后,经过 S o f t m a x Softmax Softmax 函数映射,得到神经网络所预测的输入数据 x x x 的类别分布概率 y ^ = ( y ^ 1 , y ^ 2 , y ^ 3 ) \hat{y}=\left( \hat{y}_1,\hat{y}_2,\hat{y}_3 \right) y^=(y^1,y^2,y^3)。根据前面的介绍, y ^ 1 \hat{y}_1 y^1 y ^ 2 \hat{y}_2 y^2 y ^ 3 \hat{y}_3 y^3 ( 0 , 1 ) (0,1) (0,1) 范围之间的一个概率值。由于样本 x x x 属于第一个类别,因此希望神经网络所预测得到的 y ^ 1 \hat{y}_1 y^1取值要远远大于 y ^ 2 \hat{y}_2 y^2 y ^ 3 \hat{y}_3 y^3 的取值。为了得到这样的神经网络,在训练中可利用如下交叉熵损失函数来对模型参数进行优化:
c r o s s   e n t r o p y = − ( y 1 × log ⁡ ( y ^ 1 ) + y 2 × log ⁡ ( y ^ 2 ) + y 3 × log ⁡ ( y ^ 3 ) ) cross\ entropy=-\left( y_1\times \log \left( \hat{y}_1 \right) +y_2\times \log \left( \hat{y}_2 \right) +y_3\times \log \left( \hat{y}_3 \right) \right) cross entropy=(y1×log(y^1)+y2×log(y^2)+y3×log(y^3))

在上式中, y 2 y_2 y2 y 3 y_3 y3 均为 0 0 0 y 1 y_1 y1 1 1 1,因此交叉熵损失函数简化为:
− y 1 × log ⁡ ( y ^ 1 ) = − log ⁡ ( y ^ 1 ) -y_1\times \log \left( \hat{y}_1 \right) =-\log \left( \hat{y}_1 \right) y1×log(y^1)=log(y^1)

在神经网络训练中,要将输入数据实际的类别概率分布与模型预测的类别概率分布之间的误差(即损失)从输出端向输入端传递,以便来优化模型参数。下面简单介绍根据交叉熵计算得到的误差从 y ^ 1 \hat{y}_1 y^1 传递给 z 1 z_1 z1 z 2 z_2 z2 z 3 z_3 z3 的推导与 z 2 z_2 z2 相同)的情况。

∂ y ^ 1 ∂ z 1 = ∂ ( e z 1 ∑ k e z k ) ∂ z 1 = ( e z 1 ) ′ × ∑ k e z k − e z 1 × e z 1 ( ∑ k e z k ) 2 = e z 1 ∑ k e z k − e z 1 ∑ k e z k × e z 1 ∑ k e z k = y ^ 1 ( 1 − y ^ 1 ) \frac{\partial \hat{y}_1}{\partial z_1}=\frac{\partial \left( \frac{e^{z_1}}{\sum_k{e^{z_k}}} \right)}{\partial z_1}=\frac{\left( e^{z_1} \right) ^{'}\times \sum_k{e^{z_k}-e^{z_1}\times e^{z_1}}}{\left( \sum_k{e^{z_k}} \right) ^2}=\frac{e^{z_1}}{\sum_k{e^{z_k}}}-\frac{e^{z_1}}{\sum_k{e^{z_k}}}\times \frac{e^{z_1}}{\sum_k{e^{z_k}}}=\hat{y}_1\left( 1-\hat{y}_1 \right) z1y^1=z1(kezkez1)=(kezk)2(ez1)×kezkez1×ez1=kezkez1kezkez1×kezkez1=y^1(1y^1)

由于交叉熵损失函数 − log ⁡ ( y ^ 1 ) -\log \left( \hat{y}_1 \right) log(y^1) y ^ 1 \hat{y}_1 y^1 求导的结果为 − 1 y ^ 1 -\frac{1}{\hat{y}_1} y^11 y ^ 1 ( 1 − y ^ 1 ) \hat{y}_1\left( 1-\hat{y}_1 \right) y^1(1y^1) − 1 y ^ 1 -\frac{1}{\hat{y}_1} y^11 相乘为 y ^ 1 − 1 \hat{y}_1-1 y^11。这说明一旦得到模型预测输出 y ^ 1 \hat{y}_1 y^1,将该输出减去1就是交叉损失函数相对于 z 1 z_1 z1 的偏导结果。

∂ y ^ 1 ∂ z 2 = ∂ ( e z 1 ∑ k e z k ) ∂ z 2 = 0 × ∑ k e z k − e z 1 × e z 2 ( ∑ k e z k ) 2 = − e z 1 ∑ k e z k × e z 2 ∑ k e z k = − y ^ 1 y ^ 2 \frac{\partial \hat{y}_1}{\partial z_2}=\frac{\partial \left( \frac{e^{z_1}}{\sum_k{e^{z_k}}} \right)}{\partial z_2}=\frac{0\times \sum_k{e^{z_k}-e^{z_1}\times e^{z_2}}}{\left( \sum_k{e^{z_k}} \right) ^2}=-\frac{e^{z_1}}{\sum_k{e^{z_k}}}\times \frac{e^{z_2}}{\sum_k{e^{z_k}}}=-\hat{y}_1\hat{y}_2 z2y^1=z2(kezkez1)=(kezk)20×kezkez1×ez2=kezkez1×kezkez2=y^1y^2

同理,交叉熵损失函数导数为 − 1 y ^ 1 -\frac{1}{\hat{y}_1} y^11 − y ^ 1 y ^ 2 -\hat{y}_1\hat{y}_2 y^1y^2 − 1 y ^ 1 -\frac{1}{\hat{y}_1} y^11 相乘结果为 y ^ 2 \hat{y}_2 y^2。这意味对于除第一个输出节点以外的节点进行偏导,在得到模型预测输出后,只要将其保存,就是交叉损失函数相对于其他节点的偏导结果。在 z 1 z_1 z1 z 2 z_2 z2 z 3 z_3 z3得到偏导结果后,再通过链式法则(后续介绍)将损失误差继续往输入端传递即可。

在上面的例子中,假设所预测中间值 ( z 1 , z 2 , z 3 ) (z_1,z_2,z_3) (z1,z2,z3) 经过 S o f t m a x Softmax Softmax 映射后所得结果为 ( 0.34 , 0.46 , 0.20 ) (0.34,0.46,0.20) (0.34,0.46,0.20)。由于已知输入数据 x x x 属于第一类,显然这个输出不理想而需要对模型参数进行优化。如果选择交叉熵损失函数来优化模型,则 ( z 1 , z 2 , z 3 ) (z_1,z_2,z_3) (z1,z2,z3) 这一层的偏导值为 ( 0.34 − 1 , 0.46 , 0.20 ) = ( − 0.66 , 0.46 , 0.20 ) (0.34-1,0.46,0.20)= (-0.66,0.46,0.20) (0.341,0.46,0.20)=(0.66,0.46,0.20)

可以看出, S o f t m a x Softmax Softmax 和交叉熵损失函数相互结合,为偏导计算带来了极大便利。偏导计算使得损失误差从输出端向输入端传递,来对模型参数进行优化。在这里,交叉熵与 S o f t m a x Softmax Softmax 函数结合在一起,因此也叫 S o f t m a x Softmax Softmax 损失(Softmax with cross-entropy loss)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/934866.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在PowerShell下运行curl命令出现错误:Invoke-WebRequest : 无法处理参数,因为参数名称“u”具有二义性

今天在Windows 11下测试Nanamq的HTTP API&#xff0c;按照其文档输入&#xff1a; curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/subscriptions" 结果出现二义性错误&#xff1a; 而且输入curl --help命令想看看参数说明的时候&#xff…

学者观察 | Web 3.0生态治理及其安全——北京交通大学副教授李超

导语 李超教授认为Web 3.0中无论是链上治理还是链下治理都有其优劣。链下治理机制更侧重于社区广泛参与和讨论&#xff0c;过程较为繁琐&#xff0c;但能够形成广泛的社区支持和参与&#xff0c;增强决策的合法性和接受度&#xff1b;链上治理机制通过直接在区块链上执行决策&…

React Router 6的学习

安装react-router-dom npm i react-router-dom 支持不同的路由创建 createBrowserRouter 特点 推荐使用的方式&#xff0c;基于 HTML5 的 History API。支持用户友好的 URL&#xff0c;无需 #。适用于生产环境的绝大多数场景。 适用 使用现代浏览器&#xff0c;支持 pus…

光猫开DMZ教程

本教程以移动光猫未例&#xff0c;具体操作以实际光猫为准 1、登录移动光猫管理后台 打开浏览器&#xff0c;在浏览器地址栏输入移动光猫登录管理地址192.168.1.1或者tplogin.cn 按“回车键”打开登录页面&#xff0c;然后输入路由器管理密码登录。 移动光猫登录页面 超级密…

图像的像素的存储结构:线性结构和二维数组

图像的像素的存储结构 无论是灰度图像还是RGB图像&#xff0c;当它们被读取到内存中时&#xff0c;通常也是以线性结构存储的。 这是因为计算机内存本质上是一维的地址空间&#xff0c;所有数据都是按照线性顺序存储在内存中的。 然而&#xff0c;在程序中处理这些图像时&am…

重庆轨道交通4号线寸滩地铁站自动化监测

1. 项目概述 本次项目位于重庆市轨道交通4号线中江北区寸滩站&#xff0c;轨道交通4号线是中国重庆市第八条开通运营的城市轨道交通&#xff0c;识别色为太阳橙。寸滩地处江北区中部&#xff0c;东与铁山坪街道毗邻&#xff0c;南与南岸区隔江相望&#xff0c;西与江北城中央商…

jQuery漏洞——CVE-2020-11022/CVE-2020-11023,保姆篇---春不晚

漏洞号&#xff1a;CVE-2020-11022/CVE-2020-11023 漏洞概况及影响 该类风险为应用安全缺陷类DXSS攻击&#xff0c;攻击者可以利用该漏洞注入恶意脚本代码&#xff0c;并在受害者的浏览器上执行。将导致受害者的个人信息泄露、账户被劫持、会话被劫持等安全问题。 一、漏洞版…

十五、K8s计划任务JobCronJob

K8s计划任务CronJob&Job 一、Job可以干什么 Job 控制器用于管理 Pod 对象运行一次性任务,比方说我们对数据库备份,可以直接在 k8s 上启动一个 mysqldump 备份程序,也可以启动一个 pod,这个 pod 专门用来备份用的,备份结束 pod 就可以终止了,不需要重启,而是将 Pod…

[入门一]C# webApi创建、与发布、部署、api调用

一.创建web api项目 1.1、项目创建 MVC架构的话&#xff0c;它会有view-model-control三层&#xff0c;在web api中它的前端和后端是分离的&#xff0c;所以只在项目中存在model-control两层 1.2、修改路由 打开App_Start文件夹下&#xff0c;WebApiConfig.cs ,修改路由&…

谷歌浏览器的隐私审查功能详解

随着互联网的发展&#xff0c;用户对隐私保护的关注日益增加。作为全球最受欢迎的浏览器之一&#xff0c;谷歌浏览器提供了多种隐私审查功能&#xff0c;帮助用户更好地管理和保护他们的在线隐私。本文将详细介绍如何查看Chrome浏览器的事件日志、更改标签页的打开顺序以及查看…

scala的正则表达式3

贪婪模式与非贪婪模式 1.贪婪模式 贪婪模式是正则表达式的默认行为。在这种模式下&#xff0c;量词&#xff08;如*、、?、{n,m}&#xff09;会尝试匹配尽可能多的字符。例如&#xff0c;正则表达式".*"会匹配任意数量的任意字符&#xff0c;包括空字符。 2非贪婪…

HNSW 分布式构建实践

作者&#xff1a;魏子敬 一、背景 随着大模型时代的到来&#xff0c;向量检索领域面临着前所未有的挑战。embedding 的维度和数量空前增长&#xff0c;这在工程上带来了极大的挑战。智能引擎事业部负责阿里巴巴搜推广及 AI 相关工程系统的设计和建设&#xff0c;我们在实际业务…

Windows 11 12 月补丁星期二修复了 72 个漏洞和一个零日漏洞

微软于 2024 年 12 月为 Windows 11 发布的补丁星期二修复了其产品生态系统中的 72 个漏洞&#xff0c;包括 Windows 通用日志文件系统驱动程序中一个被积极利用的零日漏洞。 这个严重漏洞可以通过基于堆的缓冲区溢出授予攻击者系统权限&#xff0c;使其成为此版本中优先级最高…

从模型到视图:如何用 .NET Core MVC 构建完整 Web 应用

MVC模式自出现以来便成为了 Web 开发的基石&#xff0c;它通过将数据、业务逻辑与用户界面分离&#xff0c;使得应用更加清晰易于维护&#xff0c;然而随着前端技术的飞速发展和框架如 React、Vue、Angular 等的崛起&#xff0c;许多开发者开始倾向于前后端分离的方式&#xff…

深度学习详解

深度学习&#xff08;Deep Learning&#xff0c;DL&#xff09;是机器学习&#xff08;Machine Learning&#xff0c;ML&#xff09;中的一个子领域&#xff0c;利用多层次&#xff08;深层&#xff09;神经网络来自动从数据中提取特征和规律&#xff0c;模仿人脑的神经系统来进…

nmap详解

Nmap&#xff08;Network Mapper&#xff09;是一个开放源代码的网络探测和安全审核的工具。由于它的功能强大&#xff0c;被广泛应用于网络安全领域。以下是Nmap的一些主要功能及其在实战中的应用举例。 Nmap的主要功能&#xff1a; 端口扫描&#xff1a;检测目标主机上开放…

Tina Linux如何enable开机LOGO

想要在Tina Linux开机的时候显示开机LOGO&#xff0c;我们需要进行如下几步工作&#xff1a; 在Uboot设备树中添加对应的屏幕设备树节点.修改Uboot配置&#xff0c;让其在开机时自动加载LOGO到屏幕上.在boot-resource分区中添加对应的启动LOGO图片&#xff0c;并命名为bootlog…

SpringBoot常见的注解

Spring Boot 常见注解详解 在 Spring Boot 开发中&#xff0c;注解是简化开发过程和提高效率的核心工具。通过使用各种注解&#xff0c;我们可以实现依赖注入、配置管理、Web 开发、数据访问等功能。以下是一些常见的 Spring Boot 注解&#xff0c;并对每个注解的作用进行了详…

使用 Python 爬取某网站简历模板(bs4/lxml+协程)

使用 Python 爬取站长素材简历模板 简介 在本教程中&#xff0c;我们将学习如何使用 Python 来爬取站长素材网站上的简历模板。我们将使用requests和BeautifulSoup库来发送 HTTP 请求和解析 HTML 页面。本教程将分为两个部分&#xff1a;第一部分是使用BeautifulSoup的方法&am…

【QGIS入门实战精品教程】4.12:QGIS创建标识码(BSM)字段并生成标识码

文章目录 一、加载实验数据二、生成BSM三、说明一、加载实验数据 加载配套实验数据包(订阅专栏后,从私信查收)中的4.12.rar中的自然幢数据,如下图所示: 打开属性表,查看属性表中的BSM效果: BSM字段说明:字符串,10位长度,以1开头,从1开始的连续序号结尾,总长度为10…