卷积神经网络的处理器及训练方法与流程

文档序号:18476207发布日期:2019-08-20 21:07阅读:237来源:国知局
卷积神经网络的处理器及训练方法与流程

本公开涉及人工智能技术领域,尤其涉及一种卷积神经网络的处理器及训练方法。



背景技术:

卷积神经网络(convolutionalneuralnetwork,缩写cnn)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,近年来被广泛用于图像处理,语音处理,以及模式识别等领域。强大数据资源的可利用性及其本身良好的可并行性使得卷积神经网络发展迅速,受到广泛关注。随着网络层数的增加,对内存的需求也越来越大。可用的内存大小成为了限制神经网络型号的瓶颈。

现有的技术通常是减少模型大小,因权重并不是神经网络训练中的主要内存占用,导致不能有效减少内存占用。或者在中央处理器(centralprocessingunit,缩写cpu)和图形处理器(graphicsprocessingunit,缩写gpu)的内存之间来回拷贝数据结构,这样会增加性能开销。



技术实现要素:

(一)要解决的技术问题

为了解决或者至少部分缓解上述技术问题,本公开提供了一种卷积神经网络的处理器及训练方法。

(二)技术方案

根据本公开的一个方面,提供了一种卷积神经网络的处理器,包括:

编码模块,用于对激活层的输入数据或输出数据进行编码;

计算模块,与所述编码模块连接,用于进行来自前向传播的运算和来自反向传播的运算;其中,在后向传播时,所述计算模块用于根据编码结果对偏导数进行运算处理。

在一些实施例中,在前向传播时,所述计算模块用于根据所述激活层的输入数据计算经由激活函数处理得到的所述激活层的所述输出数据。

在一些实施例中,所述的处理器还包括:存储模块,用于将所述编码结果存储在特征映射图中。

在一些实施例中,所述的处理器还包括:i/o模块,用于实现激活层与相邻层之间的数据传递以及编码模块、存储模块和计算模块的数据输入与输出。

在一些实施例中,所述编码模块包括:

比较器,用于将激活层的输入数据与一参照数据进行比较;以及

编码器,用于根据比较结果对所述激活层的输入数据或输出数据进行编码。

在一些实施例中,所述参照数据为一常数或所述激活层的输出数据。

在一些实施例中,所述参照数据为激活层的输出数据,若激活层的输入数据与输出数据相等,则将输出数据编码为1;否则,编码为0;或

所述参照数据为一常数,该常数取0,若输入数据大于0,则将输入数据编码为1;否则,编码为0。

在一些实施例中,所述编码采用0/1编码、以位为单位进行存储。

在一些实施例中,根据所述激活层的输入数据计算经由激活函数处理得到的所述激活层的所述输出数据,具体计算公式如下:

f(x)=max(x,αx),其中,x表示激活层的输入数据,f(x)表示激活层的输出数据,α表示所述激活函数的参数;

式中,所述激活函数为线性整流函数(rectifiedlinearunit,relu)或带泄露整流函数(leakyrectifiedlinearunit,leakyrelu)。

在一些实施例中,所述激活函数为线性整流函数,α取值在0~0.35的范围内。

在一些实施例中,在后向传播时,所述计算模块用于根据编码结果对偏导数进行运算处理:若编码结果为1,则对当前偏导数dy不做运算处理,直接将dy传递给i/o模块;若编码结果为0,则将当前偏导数dy与所述激活函数的参数α相乘,得到dy1,并把所得dy1传递给i/o模块。

根据本公开的另一个方面,提供了一种芯片,其包括所述的卷积神经网络的处理器。

根据本公开的另一个方面,提供了一种电子设备,其包括所述的芯片。

根据本公开的另一个方面,提供了一种卷积神经网络的训练方法,包括;

编码模块对激活层的输入数据或输出数据进行编码;

在后向传播时,计算模块获取当前偏导数对应的编码结果及根据编码结果进行偏导数运算处理。

在一些实施例中,所述的训练方法还包括:

在前向传播时,计算模块根据激活层的输入数据计算经由激活函数处理得到的激活层的输出数据。

在一些实施例中,所述的训练方法还包括:在编码之后,将将所述编码结果存储在特征映射图中。

在一些实施例中,所述编码模块对激活层的输入数据或输出数据进行编码的步骤包括:

将激活层的输入数据与一参照数据进行比较;以及

根据比较结果对所述激活层的输入数据或输出数据进行编码。

在一些实施例中,所述参照数据为一常数或激活层的输出数据。

在一些实施例中,所述参照数据为输出数据,若激活层的输入数据与输出数据相等,则将输出数据编码为1;否则,编码为0;或

所述参照数据为一常数,该常数取0,若输入数据大于0,则将输入数据编码为1;否则,编码为0。

在一些实施例中,在所述获取当前偏导数对应的编码结果的步骤中,根据当前偏导数dy的位置取特征映射图的对应位置的编码,所述偏导数dy的位置根据矩阵或数组相对地址获得。

在一些实施例中,根据激活层的输入数据计算经由激活函数处理得到的激活层的输出数据,具体计算公式如下:f(x)=max(x,αx),式中,x表示输入数据,f(x)表示输出数据,α表示激活函数的参数;

其中,所述激活函数为线性整流函数(rectifiedlinearunit,relu)或带泄露整流函数(leakyrectifiedlinearunit,leakyrelu)。

在一些实施例中,在所述根据编码结果进行偏导数运算处理的步骤中,若编码为1,则对当前偏导数dy不做运算处理,直接将dy传递给i/o模块;若编码为0,则将当前偏导数dy与所用激活函数等式中的α相乘,得到结果dy1,并把所得结果dy1传递给i/o模块。

根据本公开的一个方面,提供了一种卷积神经网络的编码存储装置,包括:存储模块和编码模块,该编码模块包括比较器和编码器;其中,所述比较器用于将激活层的输入数据与一参照数据进行比较,所述编码器用于根据比较结果对所述激活层的输入数据或输出数据进行编码。

在一些实施例中,所述存储模块用于将编码结果存储在特征映射图中、存储所述比较结果和存储激活函数的参数α。

在一些实施例中,所述参照数据为一常数或激活层的输出数据。

在一些实施例中,所述参照数据为激活层的输出数据,若激活层的输入数据与输出数据相等,则将输出数据编码为1;否则,编码为0;或

所述参照数据为一常数,该常数取0,若输入数据大于0,则将输入数据编码为1;否则,编码为0。

在一些实施例中,所述编码采用0/1编码、以位为单位进行存储。

根据本公开的另一个方面,提供了一种卷积神经网络的处理器,其包括所述的编码存储装置,还包括:

计算模块,用于进行来自前向传播的运算和来自反向传播的运算;其中,在前向传播时,所述计算模块用于根据所述激活层的输入数据计算经由激活函数处理得到的所述激活层的所述输出数据;在后向传播时,所述计算模块用于根据编码结果对偏导数进行运算处理。

在一些实施例中,所述的处理器,还包括:i/o模块,用于激活层与相邻层之间的数据传递,存储模块与计算模块之间的数据传递,以及编码存储装置的数据输入与输出。

在一些实施例中,根据所述激活层的输入数据计算经由激活函数处理得到的所述激活层的所述输出数据,具体计算公式如下:

f(x)=max(x,αx),其中,x表示激活层的输入数据,f(x)表示激活层的输出数据,α表示所述激活函数的参数;

式中,所述激活函数为线性整流函数(rectifiedlinearunit,relu)或带泄露整流函数(leakyrectifiedlinearunit,leakyrelu)。

在一些实施例中,所述激活函数为线性整流函数,α取值在0~0.35的范围内。

在一些实施例中,在后向传播时,所述计算模块用于根据编码结果对偏导数进行运算处理:若编码结果为1,则对当前偏导数dy不做运算处理,直接将dy传递给i/o模块;若编码结果为0,则将当前偏导数dy与所述激活函数的参数α相乘,得到dy1,并把所得dy1传递给i/o模块。

根据本公开的另一个方面,提供了一种卷积神经网络的编码存储方法,包括:

将激活层的输入数据与一参照数据进行比较;以及

根据比较结果对所述激活层的输入数据或输出数据进行编码。

在一些实施例中,所述的卷积神经网络的编码存储方法还包括:存储所述比较结果、编码结果和激活函数的参数α;其中,所述编码结果存储在特征映射图中。

在一些实施例中,所述参照数据为一常数或激活层的输出数据。

在一些实施例中,所述参照数据为输出数据,若激活层的输入数据与输出数据相等,则将输出数据编码为1;否则,编码为0;或

所述参照数据为一常数,该常数取0,若输入数据大于0,则将输入数据编码为1;否则,编码为0。

根据本公开的另一个方面,提供了一种卷积神经网络的训练方法,包括;

在前向传播时,根据激活层的输入数据计算经由激活函数处理得到的激活层的输出数据;

在后向传播时,获取当前偏导数对应的编码结果及根据编码结果进行偏导数运算处理。

在一些实施例中,所述的训练方法还包括:将运算处理结果输出。

在一些实施例中,在所述获取当前偏导数对应的编码结果的步骤中,根据当前偏导数dy的位置取特征映射图的对应位置的编码,所述偏导数dy的位置根据矩阵或数组相对地址获得。

在一些实施例中,根据激活层的输入数据计算经由激活函数处理得到的激活层的输出数据,具体计算公式如下:f(x)=max(x,αx),式中,x表示输入数据,f(x)表示输出数据,α表示激活函数的参数;

其中,所述激活函数为线性整流函数(rectifiedlinearunit,relu)或带泄露整流函数(leakyrectifiedlinearunit,leakyrelu)。

在一些实施例中,在所述根据编码结果进行偏导数运算处理的步骤中,若编码为1,则对当前偏导数dy不做运算处理,直接将dy传递给i/o模块;若编码为0,则将当前偏导数dy与所用激活函数等式中的α相乘,得到结果dy1,并把所得结果dy1传递给i/o模块。

根据本公开的另一个方面,提供了一种芯片,其包括所述的卷积神经网络的编码存储装置或所述的卷积神经网络的处理器。

根据本公开的另一个方面,提供了一种电子设备,其包括所述的芯片。

(三)有益效果

从上述技术方案可以看出,本公开卷积神经网络的处理器及训练方法至少具有以下有益效果其中之一:

(1)采用本公开处理器及训练方法,无需对任何影响预测结果的参数做出修改,因此不会影响卷积神经网络预测的准确性。

(2)在前向传播时已经对激活层的输入和输出进行了比较,因此在反向传播时只需要判断编码结果,不需要调出前向传播时激活层的输入和输出结果以选择求偏导数的方式。因此本公开减少了对内存的输入输出次数,优化了卷积神经网络的性能。

(3)本公开将激活层的特征映射图中的数据进行编码存储,将浮点数32位的数据压缩至1位表示,有效节约了内存。

附图说明

图1为依据本公开实施例编码存储装置方框图。

图2为依据本公开实施例处理器方框图。

图3为依据本公开另一实施例处理器方框图。

图4为依据本公开卷积神经网络的编码存储方法流程图。

图5为依据本公开实施例数据前向传播时的数据流向图。

图6为依据本公开实施例卷积神经网络的训练方法流程图。

具体实施方式

为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开作进一步的详细说明。

需要说明的是,在附图或说明书描述中,相似或相同的部分都使用相同的图号。附图中未绘示或描述的实现方式,为所属技术领域中普通技术人员所知的形式。另外,虽然本文可提供包含特定值的参数的示范,但应了解,参数无需确切等于相应的值,而是可在可接受的误差容限或设计约束内近似于相应的值。此外,以下实施例中提到的方向用语,例如“上”、“下”、“前”、“后”、“左”、“右”等,仅是参考附图的方向。因此,使用的方向用语是用来说明并非用来限制本公开。

在一实施例中,本公开提供了一种卷积神经网络的编码存储装置,如图1所示,该卷积神经网络的编码存储装置包括:存储模块和编码模块,该编码模块包括比较器和编码器;其中,所述比较器用于将激活层的输入数据与一参照数据进行比较,所述编码器用于根据比较结果对所述激活层的输入数据或输出数据进行编码。所述存储模块用于将编码结果存储在特征映射图中,还可用于存储比较结果及存储激活函数的参数α。

在一实施例中,本公开提供了一种卷积神经网络的处理器,如图2所示,该卷积神经网络的处理器包括:编码模块,用于对激活层的输入数据或输出数据进行编码;以及计算模块,与所述编码模块连接,用于进行来自前向传播的运算和来自反向传播的运算;其中,在后向传播时,所述计算模块用于根据编码结果对偏导数进行运算处理。此外,在前向传播时,所述计算模块用于根据所述激活层的输入数据计算经由激活函数处理得到的所述激活层的所述输出数据。

在一实施例中,所述编码模块可包括上述比较器以及上述编码器;所述比较器用于将激活层的输入数据与一参照数据进行比较,所述编码器用于根据比较结果对所述激活层的输入数据或输出数据进行编码。

在一实施例中,所述卷积神经网络的处理器也可进一步包括上述存储模块,用于将编码结果存储在特征映射图中、存储所述比较结果和存储激活函数的参数α。

上述实施例中,所述参照数据是为了对输入数据大小进行比较而作为参照的数据,具体可以为一常数或激活层的输出数据。所述编码采用0/1编码、以位为单位进行存储。

可选的,所述参照数据为激活层的输出数据,若激活层的输入数据与输出数据相等,则将输出数据编码为1;否则,编码为0;或所述参照数据为一常数,该常数取0,若输入数据大于0,则将输入数据编码为1;否则,编码为0。

在一实施例中,本公开还提供了一种卷积神经网络的处理器,其除了包括上述编码模块、上述存储模块以及上述计算模块之外,还可包括:i/o模块。所述i/o模块用于激活层与相邻层之间的数据传递,存储模块与计算模块之间的数据传递,编码模块、计算模块、存储模块的数据输入与输出。

具体的,如图3所示,本实施例处理器包括:i/o模块a、计算模块b、编码模块c及存储模块d。所有模块均可通过硬件电路实现。

其中,所述i/o模块a,即输入输出模块,该模块用于激活层与相邻层(指该神经网络中相邻的网络层,可以为卷积层、激活层、全连接层等)之间的数据传递,传递输入数据到计算模块与编码模块,以及接收计算结果,并且参与存储模块数据的读写操作的数据传递。

计算模块b,在前向传播过程中,计算输入数据经激活函数处理的结果,交给i/o模块向后传递;在后向传播过程中,对取出的编码结果(也称编码数据)进行判断,为1时将传入的偏导数交给i/o模块,继续向后传播;为0时计算当前传入偏导数与激活函数的参数α之积,然后将计算结果交给i/o模块向后传播。当然,此处编码方式不限制于0/1编码,可以为多值编码,也可以为其它占用多位存储空间的编码方式等。编码可以以位为单位进行存储,所述编码方式将浮点数占用32位存储的数据压缩至1位表示,有效节约了内存。

编码模块c,包括比较器和编码器,其中,比较器比较输入数据与输出数据的比较结果,然后将其传播编码器。编码器接收比较结果将比较结果进行编码输入数据与计算结果相等时,也就是输入数据大于0的数据,将其编码为1,然后将编码存储至存储模块;否则,将输入数据编码为0并将该编码存储至存储模块。

存储模块d,存储了编码数据,以及激活函数的参数α等数据。接收来自编码模块的数据编码,等待后向传播时将编码取出至i/o模块,取出后释放该编码内存。参数α在后向传播时取出,参与偏导数求解运算。

上述实施例中,对于所述计算模块,在前向传播时,根据激活层的输入数据计算经由激活函数处理得到的所述激活层的输出数据,具体计算公式如下:

f(x)=max(x,αx),其中,x表示激活层的输入数据,f(x)表示激活层的输出数据,α表示所述激活函数的参数;

式中,所述激活函数可以为线性整流函数(rectifiedlinearunit,relu)或带泄露整流函数(leakyrectifiedlinearunit,leakyrelu)。若所述激活函数为线性整流函数,α取值优选在0~0.35的范围内。

在后向传播时,根据编码结果对偏导数进行运算处理:若编码结果为1,则对当前偏导数dy不做运算处理,直接将dy传递给i/o模块;若编码结果为0,则将当前偏导数dy与所述激活函数的参数α相乘,得到dy1,并把所得dy1传递给i/o模块。

在一实施例中,本公开还提供了一种卷积神经网络的编码存储方法,如图4所示,包括:将激活层的输入数据与一参照数据进行比较;以及根据比较结果对所述激活层的输入数据或输出数据进行编码。其中,所述参照数据为一常数或激活层的输出数据。

具体而言,所述参照数据为输出数据,若激活层的输入数据与输出数据相等,则将输出数据编码为1;否则,编码为0;或所述参照数据为一常数,该常数取0,若输入数据大于0,则将输入数据编码为1;否则,编码为0。

进一步的,所述的卷积神经网络的编码存储方法还包括:存储所述比较结果、编码结果和激活函数的参数α;其中,所述编码结果存储在特征映射图中。

在一实施例中,本公开还提供了一种卷积神经网络的训练方法,包括;

编码模块对激活层的输入数据或输出数据进行编码;

在后向传播时,计算模块获取当前偏导数对应的编码结果及根据编码结果进行偏导数运算处理。

另外,所述的训练方法还包括:在前向传播时,计算模块根据激活层的输入数据计算经由激活函数处理得到的激活层的输出数据。

在一实施例中,在所述训练方法中,所述编码模块对激活层的输入数据或输出数据进行编码的步骤包括:

将激活层的输入数据与一参照数据进行比较;以及

根据比较结果对所述激活层的输入数据或输出数据进行编码

在一实施例中,本公开还提供了一种卷积神经网络的训练方法,包括;

在前向传播时,根据激活层的输入数据计算经由激活函数处理得到的激活层的输出数据;

在后向传播时,获取当前偏导数对应的编码结果及根据编码结果进行偏导数运算处理。

上述实施例中,所述的训练方法还包括:将运算处理结果输出。

具体的,如图5-6所示,本公开卷积神经网络的训练方法包括以下步骤:

s1,前向传播至激活层,上一层的输出数据(即神经网络中的上一层网络,就卷积神经网络而言,上一层一般为卷积层或者池化层,相应的,上一层的输出数据即经卷积运算或池化处理的数据)作为本激活层的输入数据,使用i/o模块将其输入至计算模块和编码模块的比较器之中,转步骤s2;

s2,输入数据通常情况下为一组数据,通常用矩阵形式表示,但不限制于矩阵表示,可为链表,队列等数据结构。将计算模块中的输入数据通过激活函数进行运算,得到运算结果f(x),转步骤s3;

其中,计算模块每个计算单元每次只计算单个输入数据,设输入数据为x,输出数据的计算公式如下:

f(x)=max(x,αx),

式中,α表示激活函数的参数,为一常数,优选的,取值在[0,0.35]之间;

s3,将运算结果f(x)传递给i/o模块和编码模块的比较器,i/o模块将数据传递给下一层(即神经网络中排在当前激活层的下一层网络,可为卷积层、池化层等)网络;比较器比较输出结果f(x)与数据x相等,将比较结果传递给编码器,转步骤s4;否则,转步骤s5;

s4,编码模块的编码器将结果编码为1,并存储在特征映射图(featuremap)的对应位置中,其中特征映射图可存储的编码数量应与传递至激活层的数据量相等,转步骤s6;

s5,编码器将该结果编码为0,存储在特征映射图中,转步骤s6;

s6,反向传播至激活层,设当前偏导数为dy,根据当前偏导数dy位置,取特征映射图的对应位置的编码,如果所得编码为1,转步骤s7;否则转步骤s8;其中偏导数dy的位置可根据矩阵或数组等数据结构相对地址获得,但不限于此种获取方式;

s7,对当前偏导数dy不做运算处理,直接将dy传递给i/o模块,转步骤s9;

s8,将当前偏导数dy与所用激活函数等式中的α相乘,得到结果dy1,并把所得结果dy1传递给i/o模块,转步骤s9;

s9,i/o模块输出数据。

本公开将前向传播过程中激活层的输入与输出进行比较,将比较结果进行编码存储,在后向传播过程中直接根据编码结果进行偏导数求解,缩小了内存占用,减少了访存次数,并且对网络预测结果的精确度无影响。

需要说明的是,上述实施例中,编码模块的比较器是将激活层的输入数据与输出数据进行比较,编码器根据比较结果对激活层的输出数据进行编码,但本公开并不限于此,编码模块的比较器还可以是将激活层的输入数据与一常数等参照数据进行比较,编码器根据比较结果对激活层的输入数据进行编码,其效果与上述实施例中的方式是等价的,也就是说本公开并不限于仅对输入数据与输出数据进行比较,也不仅限于对输出数据进行编码。

另外,本公开中的特征映射图中的数据并不限于所述激活层的输出数据(激活层处理之后直接存储的数据),还包括编码处理后的所述激活层的输出数据(激活层处理之后经编码处理之后再存储的数据)。

在一些实施例里,本公开还提供了一种芯片,其包括了上述编码存储装置或处理器。

在一些实施例里,本公开还提供了一种芯片封装结构,其包括了上述芯片。

在一些实施例里,本公开还提供了一种板卡,其包括了上述芯片封装结构。

在一些实施例里,本公开还提供了一种电子设备,其包括了上述板卡。

电子设备包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。

所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、b超仪和/或心电图仪。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本申请所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。

所述集成的单元如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储器包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、只读存储器(英文:read-onlymemory,简称:rom)、随机存取器(英文:randomaccessmemory,简称:ram)、磁盘或光盘等。

以上所述的具体实施例,对本公开的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本公开的具体实施例而已,并不用于限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1