数据压缩求助
  • 板块学术版
  • 楼主wudiss8
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/9 21:11
  • 上次更新2024/8/9 22:31:29
查看原帖
数据压缩求助
95072
wudiss8楼主2024/8/9 21:11

本人是一名退役OIer,大学专业医学,现在遇到一个难题,如下:

  1. 我们现在拥有一个[3,长度未知]的数组,它表示的是一个肽链上各个原子的空间位置[x,y,z](-100<x,y,z<100)(你可以理解为一条绳子上串了若干个珠子,我们现在有每个珠子在空间中的位置),由于不同蛋白质原子数目不同,故而数组的长度也不同,我们现在统一将长度设置为25000(数据中一个蛋白质的原子数目均小于25000),剩余的位置全部用0填充,并且新增一维表示这个位置是否有原子,现在我们得到了一个[4,25000]的数组表示原子的空间位置
  2. 现在我们想将其表示成一个[1,128]的向量(数组),这个向量刻画了所有原子的位置信息(某种角度来说就是数据压缩),这样做的目的是后续作为深度学习的输入
  3. 现在,如何尽量无损的将信息压缩进[1,128]的数组中,我们采用的思路是使用自动编码器进行压缩,即我们通过一个神经网络的架构(encoder),将[4,25000]压缩成[1,128],再通过另一个结构相似的神经网络(decoder)将其解码成[4,25000],如果decoder能较好地还原数组,则我们认为这个压缩过程是相对无损的
  4. 现在我们神经网络训练500轮以后loss还是不稳定(你可以理解为压缩后还原效果不好),该如何改进?或者也没有其他比较优质的算法来进行压缩 此处贴上解码器代码(python)
class Autoencoder(nn.Module):

    def __init__(self):

        super(Autoencoder, self).__init__()


        # 编码器部分

        self.encoder = nn.Sequential(

            nn.Flatten(),

            nn.Linear(3 * max_length, 1024),

            nn.ReLU(inplace=True),  # 更改为 ReLU

            nn.Linear(1024, 512),

            nn.ReLU(inplace=True),  # 更改为 ReLU

            nn.Linear(512, 256),

            nn.ReLU(inplace=True),  # 更改为 ReLU

            nn.Linear(256, 128),

            nn.ReLU(inplace=True)  # 更改为 ReLU

        )


        # 解码器部分

        self.decoder = nn.Sequential(

            nn.Linear(128, 256),

            nn.ReLU(inplace=True),  # 更改为 ReLU

            nn.Linear(256, 512),

            nn.ReLU(inplace=True),  # 更改为 ReLU

            nn.Linear(512, 1024),

            nn.ReLU(inplace=True),  # 更改为 ReLU

            nn.Linear(1024, 3 * max_length),

            nn.Tanh()  # 使用 tanh 激活函数

        )


    def forward(self, x):

        mid = self.encoder(x)

        out = self.decoder(mid)

        reshape_out = out.view(out.size(0), 3, max_length)

        final_out = reshape_out * 100  # 扩展输出范围

        return final_out

希望来点大佬救救孩子orz

2024/8/9 21:11
加载中...