天天看点

pytorch lstm 写诗文的魔改,测试,猜想

首先目前自然语言处理的网络基本都是transformers的变体。

我们就不从热闹了,就使用简单的FC层设计一个,首先一般自然语言都是一个概率问题,

所以就是一个分类问题,一般都是有多少的字就分为多少类,一般的输入是语句的编码或者位置编码,一般的输出是一个多组多分类(一句话有多个字这个字是哪个字)。

但是,我就想说一句人们做了这么久的分类就是不知道变通吗,就是一直跟着屁股后跑吗。1000个字就一千分类,一万个字就亿万分类。中国有4万个字好吧,请问老师权重数量的堆叠,好意思吗。

分类是一个二进制,也就是onehot。这没问题,问题就是你都会使用多组了为啥还是老样子呢,为什么不多一个维度呢,

我们今天提出的思想就是<code>多组多组多个字</code>

一句话多个字,一个字多个进制位数,一个进制位10个分类。

使用6组10分类就能达到10万分类的级别,权重减少多少。

我们先也不要说这个方法是不是权重太少无法达到效果,要试试才知道

接下来我们就使用这样的方法随意找一个nlp任务改造一次验证一下。

在gittee 上找到一个地址如下

安装

pip3 install torchnet -i https://pypi.doubanio.com/simple

下载

数据集

从main.py 中可以看到8293 分类

只要在定义模型前

可以看到分类数是8293 接下来就是我们该如何设计成 4组10分类解决这个问题。

就是直接将 batch_size4 10

假如标签label=[8293,8293] batch_size=2 label=[[8,2,9,3],[8,2,9,3]] =[8,2,9,3,8,2,9,3]

只要标签对改了输出维度改好就可以了因为在网络中的和输入的物理意义全部取决于标签。

但是由于label多了 所以 网络输出也要乘以4 本来是batch_size4 但是输入 和label是一个对4个,所以输出设置为40尾号

大家总是觉得输出是多少就是多少分类,决定是多少分类的是 输出和label输入 loss的时候

所以输出定义为40没有问题,只要在输入loss的时候进行 view(batch_size4,-1)即可

在这里就直接可以将这句话写在网路的最后

output=output.view(seq_len * batch_size4,-1)

即可

在model中使用将

改为

将这句话注释掉

接着就是将label 进行 变形了

abcd %100 =cd abcd %1000 =bcd

abcd //100=ab abcd //10 =abc

abcd %1000 =bcd //100=b

abcd //10 =abc%10=c

abcd %10 =d

abcd //1000 =a

这样就得到了四个值直接将他们cat 即可

但是要这样

例如

这样变化类型

可以训练起来了代码如下只要下载后执行main_two即可执行训练

效果不是很好 猜想 因为 原来的fc参数是 8000512 =4000000 参数 而 51240 =20000参数

所以使用四流网络的500万参数代码上面的fc层。

测试效果还是一样不是很好 所以咱们猜的原因不对

咱们使用200分类这个方案

a=x//100

b=x%100

最后batch_size=32训练100轮

测试结果如下

上面网络的结尾使用20映射200

接下来我们使用297映射200试试

结果如下

而直接liner 200 这样

可以看出上的数据后面的比前面的语句通顺了,所以说我们的方法是可行的但是还是比不上8000分类

拼接法不成咱们试试乘法,也就是说class**2=class_num

直接liner 400

如下

所以程度还是不如8000分类。

且 到此明白一个道理 无论是输出还是怎么训练一个网络的一个模型 只对应一种映射规则

也就是 一一映射 的关系。但是整个训练过程才是所有的映射关系。

也就是说如果只是这样的训练神经网络一个得到一个最优解那么就无法体现智能,只是一个映射函数,而训练的过程就是智能的体现。故而一个网络要如何的将所有的模型存储起来最为关键。

其实不是网络压缩,而是多个模型如何压缩的问题。也就是如何的保存多个训练时候的权重。

比如说 保存60轮的模型。如何压缩为一个模型的存储量。

所谓文无第一

还有就是作为智能,并不是一一映射的函数。所以要有一个随着环境变化能调整模型的能力,也是不断的调整的过程(训练过程从来没有停止才是智能。)实时网络才是智能的关键,但是实时不能全部实时,那样过去的知识就会倍覆盖掉。故而要有固化或者,特定条件才会被改变的部分。且大部分都是如此,就和进位原理类似。

1,压缩多模型设计

2,要有条件激活区域网路的能力

3,要有实时能力

https://dongfangyou.blog.csdn.net/article/details/113942576

https://download.csdn.net/download/weixin_32759777/15419710

继续阅读