处理pdb文件

处理pdb文件importosfrommathimportsqrtimportnumpyimporttorchfromBio.PDBimportPDBParserfromtorch.utils.dataimportDataset,DataLoaderfromtorch.utils.tensorboardimportSummaryWriterdevice=torch.device(“cuda”)classP450Dataset(Dataset):de.

大家好,又见面了,我是你们的朋友全栈君。

import os
from math import sqrt
import numpy
import torch
from Bio.PDB import PDBParser
from torch.utils.data import Dataset, DataLoader
from torch.utils.tensorboard import SummaryWriter
device = torch.device("cuda")


class P450Dataset(Dataset):
    def __init__(self, testp450, transform=None, target_transform=None):
        # 处理pdb数据
        path = './testp450'
        arr = []
        max_num = 0
        index = 0
        self.data = []
        # 遍历文件夹下的pdb文件名
        for filename in os.listdir('testp450'):
            p = PDBParser()
            struct_id = "1fat"
            filename = path + '/' + filename
            structure = p.get_structure(struct_id, filename)
            atoms = structure.get_atoms()
            atoms = list(atoms)

            # 获得一个结构中的原子总数
            atom_num = 0
            for atom in atoms:
                atom_num = atom_num + 1
            print(atom_num)
        #     arr.append(atom_num)
        # max_num = max(arr)
        # print(max_num)

            # 计算距离矩阵
            i = 0
            n = numpy.zeros(shape=(1, 1))
            a = numpy.zeros(shape=(atom_num ** 2, 1))
            b = numpy.zeros(shape=(atom_num, atom_num))

            # 快速遍历一个结构中的所有原子
            for atom in atoms:
                for ato in atoms:
                    n = sqrt((atom.get_coord()[0] - ato.get_coord()[0]) ** 2 +
                             (atom.get_coord()[1] - ato.get_coord()[1]) ** 2 +
                             (atom.get_coord()[2] - ato.get_coord()[2]) ** 2)
                    a[i] = n
                    i = i + 1

            # 创建距离矩阵
            m = 0
            for p in range(0, atom_num):
                for q in range(0, atom_num):
                    b[p][q] = a[m]
                    m = m + 1
            # print(b)
            # 把所有数据padding到同一大小,计算剩余需要填补
            padding_num = 4996 - atom_num
            # b = torch.tensor(b, dtype=torch.float32)
            b = numpy.pad(b, (0, padding_num), 'constant')
            b = torch.tensor(b, dtype=torch.float32)
            # b = torch.reshape(b, (1, 5000, 5000))
            b = b[numpy.newaxis, :, :]
            print(b)
            print(b.shape)
            # 首先读取数据,计算残基距离矩阵
            # 加载所有数据,处理成相应的格式,
            self.data.append(b)

        print(self.data)
        self.testp450 = testp450

    def __len__(self):
        # 返回数据集长度,(有多少数据)
        return len(self.data)

    def __getitem__(self, item):
        return self.data[item]


num_epochs = 1000
batch_size = 2
learning_rate = 1e-3
total_train_step = 0


model = autoencoder()
model.to(device)
criterion = nn.MSELoss()
criterion.to(device)
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
dataset = P450Dataset(testp450="testp450")
dataloader = DataLoader(dataset, batch_size, shuffle=True)
writer = SummaryWriter("./logs_testp450")

for epoch in range(num_epochs):
    for data in dataloader:
        img = data
        img = img.to(device)
        # print(img.shape)
        # ===================forward=====================
        output = model(img)
        # print(output.shape)
        loss = criterion(output, img)
        # ===================backward====================
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        total_train_step = total_train_step + 1
        if total_train_step % 100 == 0:
            print("训练次数:{},Loss:{}".format(total_train_step, loss.item()))
        writer.add_scalar("train_loss1000", loss.item(), total_train_step)

writer.close()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137318.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pytorch中tensor转numpy

    pytorch中tensor转numpycputensor转numpy:#假定a为tensora.numpy()gputensor转numpy:gpu下的tensor不能直接转numpy,需要先转到cputensor后再转为numpya.cpu().numpy()注:若tensor带有梯度,以上述方式转换时会报错:RuntimeError:Can’tcallnumpy()onTensorthatrequiresgrad.Usetensor.detach().numpy()instead.

    2022年10月19日
    2
  • 宝塔服务器管理助手Linux面版-使用教程

    宝塔服务器管理助手Linux面版-使用教程

    2021年9月22日
    45
  • 五万字总结,深度学习基础。「建议收藏」

    五万字总结,深度学习基础。「建议收藏」文章目录1基本概念1.1神经网络组成?1.2神经网络有哪些常用模型结构?1.3如何选择深度学习开发平台?1.4为什么深层神经网络难以训练?1.5深度学习和机器学习的异同?2网络操作与计算2.1前向传播与反向传播?2.2如何计算神经网络的输出?2.3如何计算卷积神经网络输出值?2.4如何计算Pooling层输出值输出值?2.5实例理解反向传播2.6神经网络更“深”有什么意义?3超参数3.1什么是超参数?3.2如何寻找超参数的最优值?3.3超参数搜索一般过程?4激活函数4

    2022年5月21日
    37
  • java 学生信息管理系统

    java 学生信息管理系统只设计了一部分全部的太多了。会慢慢更新增加。学生信息管理包括添加,删除,修改,查询,显示全部等具体结构如图在SQLServer2005数据库上实现数据操作。使用纯面向对象的java语言作为开发语言在sqlserver2005新建一个名为Student的数据库,在下面新建一个名为stu的表当然列名你可以随便写当然要有个学号啊。我的修改等等都是根据学号的

    2022年7月13日
    15
  • 什么是前端缓存

    什么是前端缓存大家在日常的开发工作过程中 有没有遇到过下面几种情况 部署 发布前端工程后 增加的功能或修改的 bug 没有生效测试同学测试功能时经常暴力地清除所有浏览器缓存前端开发同学经常说 你 强刷 一下就好了 遇到上面这些情况 大部分同学就知道了 这是前端有缓存的原因 那具体什么是前端缓存呢 前端缓存仅仅和前端有关系吗 前端缓存 浏览器缓存前端缓存 是浏览器为了提升网站的加载性能 缩短用户

    2025年8月6日
    0
  • 一、数据库表设计规范「建议收藏」

    一、数据库表设计规范「建议收藏」一、三范式为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。1.第一范式确保每列保持原子性列不可分 有主键根据实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常…

    2022年6月20日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号