处理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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 手把手教你上手Proteus(下载安装+仿真51单片机程序)

    手把手教你上手Proteus(下载安装+仿真51单片机程序)Proteus软件的功能很强大,它集合了电路仿真、PCB设计、虚拟模型仿真,不过本文只介绍Proteus的安装和它的电路仿真功能(单片机及外设)。本文介绍的Proteus版本为Proteus8.9SP2Pro(免破解版本)

    2022年5月25日
    108
  • 魔百盒CM211-2系列(ZG/CH/YS)海思MV300H/310芯片-刷机固件及教程

    魔百盒CM211-2系列(ZG/CH/YS)海思MV300H/310芯片-刷机固件及教程魔百盒CM211-2系列(ZG/CH/YS)海思MV300H/310芯片-刷机固件及教程固件说明:1、魔百盒CM211-2-全系列-海思Hi3798MV300H/310-通用NAND和EMMC卡刷固件,支持红外蓝牙遥控,支持常见多种无线,同时支持RTL8822BS、RTL8822CS、MT7661、MT7663、MT7668等无线;2、解除官方屏蔽无线功能,有线和无线正常使用;3、代工标识说明:一般没标识是朝歌代工,带有ZG字母的就是朝歌代工,带有CH字母的就是长虹代工,带有YS或YST字

    2022年7月24日
    63
  • RAII机制_机制与机理的区别

    RAII机制_机制与机理的区别本文转载自:https://blog.csdn.net/wozhengtao/article/details/52187484前言    RAII的基本思想就是当对象的生命周期结束时,自动调用起析构函数。那以下将围绕RAII,全面的讲解RAII的相关知识。什么是RAII    RAII的英文全拼是…

    2025年7月12日
    2
  • stn专线和otn有什么区别_stn云专线是什么意思?

    stn专线和otn有什么区别_stn云专线是什么意思?云专线产品是指依托于STN(智能传送网),为客户提供灵活业务接入、灵活带宽、高可靠性及端到端质量保障的专线产品。STN云专线产品描述:依托于STN(智能传送网),为客户提供灵活业务接入、灵活带宽、高可靠性及端到端质量保障的二层以太专线产品。STN(SmartTransportNetwork)智能传送网,采用JIPRAN及PTN技术相结合发展起来的—种增强型分组组网技术,该技术可叠加在移动业…

    2022年10月19日
    4
  • MFC Java 使用socket 中文乱码解决方法(一)「建议收藏」

    MFC Java 使用socket 中文乱码解决方法(一)「建议收藏」MFCJava使用socket中文乱码解决方法(一)1、在使用MFC做服务端,Java做客户端时(1)客户端向服务端发送数据 Java发送代码:PrintWriterprintWriter= newPrintWriter( newBufferedWriter( newOutputStreamWriter( client.getOutputStream(),”gbk”)),true); //Windows一般默认为GB

    2022年7月14日
    12
  • Tomcat报错—Tomcat内存溢出及大小调整

    本文记录一些常见的Tomcat经常出现的内存溢出问题,在查询大量数据和加载jar包出现异常。

    2022年2月24日
    44

发表回复

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

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