当前位置: 首页 > news >正文

网站建设的系统简介哪家网络公司做网站好

网站建设的系统简介,哪家网络公司做网站好,外链工具在线,如何做一个自己的电商平台AutoFragDiff 是一个基于片段的#xff0c;自回归的#xff0c;口袋条件下的#xff0c;3D分子生成扩散模型。 AutoFragDiff方法来源于文章《Autoregressive fragment-based diffusion for pocket-aware ligand design》#xff0c;由加州大学的Mahdi Ghorbani等人于2023年… AutoFragDiff 是一个基于片段的自回归的口袋条件下的3D分子生成扩散模型。 AutoFragDiff方法来源于文章《Autoregressive fragment-based diffusion for pocket-aware ligand design》由加州大学的Mahdi Ghorbani等人于2023年11月3日发表在OpenReview是NeurIPS2023 Poster文章。 其中有两名作者来自罗氏。 文章链接为Autoregressive fragment-based diffusion for pocket-aware ligand design | OpenReview。 一、AutoFragDiff 模型介绍 传统的基于口袋的3D分子生成网络的常用方法是自回归模式模型放置原子和原子键是迭代的逐个进行。 但是这种方式会导致误差的积累同时生成速度较慢生成苯环分子也需要6个步骤。而使用基于分子片段的自回归方法可以避免这个问题。 作者使用使用几何矢量感知器和自回归扩散模型 Autoregressive Diffusion Models (ARDMs)以自回归的模式分子骨架和蛋白质口袋为条件下逐个预测新分子片段的原子类型和空间坐标。 在这一过程中AutoFragDiff允许每个片段经历去噪过程预测原子坐标和原子类型。该方法改善了生成的3D 分子的局部几何形状同时保持与蛋白质靶标的高预测结合亲和力。 如下示意图 此外AutoFragDiff不是依赖固定的片段库而是动态生成片段为生成的片段多样性提供了灵活性。 该模型可以从用户提供的起始分子骨架进行支架延伸即适用于骨架生长/延伸任务既可以使用于口袋限制下也可以使用在没有口袋限制的情况。即AutoFragDiff可以依据提供的分子片段在有口袋和没有口袋的条件下进行分子扩展生成完整分子。 二、模型性能 作者统计了AutoFragDiff生成分子中环的键角与二面角分布与CrossDock数据集中分布的Jensen-Shannon DivergenceJSD该值越小越好结果显示AutoFragDiff生成环与真实数据的更像生成的分子结构更真实要优于其他模型。如下表 除了环状的原子键作者在SI中也提供了其他原子键的JSD相似度结果如下表。 从表中看TargetDiff的结果更好一些但是AutoFragDiff和TargetDiff都优于3DSBDD和Pocket2Mol。 作者同时比较了AutoFragDiff模型与3D-SBDDPocket2Mol等模型的Vina score, 多样性可合成性和成药性指标如下图。 其中AutoFragDiff生成分子的Vina score要优于其他对比模型但是成药性可合成性多样性指标上弱于其他对比模型。 然后作者给了一个具体的例子1a2g如下图。感觉生成的分子还行。对比原有的骨架Vina score也下降很多。 由于是会议的poster文章作者给出的结果并不多。在SI中提供了生成分子与口袋原子“碰撞”个数strain energy,和相互作用原子的信息。 AutoFragDiff 分子与口袋原子的平均冲突为 6.7 次优于其他基于扩散的模型TargetDiff 9.2 和 DiffSBDD 平均 11.8。  非扩散模型 Pocket2Mol 和 3DSBDD 每个分子平均有 5.7 次和 3.9 次冲突而 CrossDock 数据集的测试集平均有 4.8 次冲突 如下图 同样非扩散模型Pocket2Mol 和 3DSBDD 通常生成比基于扩散的模型具有更低应变能的分子构象更加合理如下图。 考虑到相互作用类型TargetDiff 分子具有最多的氢键供体和受体而 AutoFragDiff 和 TargetDiff 都显示出最多的疏水性和范德华相互作用与 CrossDock 测试集分子相当如下图。 三、模型评测 3.1 环境安装 作者提供了github 链接 GitHub - keiserlab/autofragdiff 复制代码 git clone https://github.com/keiserlab/autofragdiff.git 项目目录结构 . ├── LICENSE ├── README.md ├── __init__.py ├── analysis ├── analyze_generated_pocket_mols.py ├── analyze_scaffolds_generated.py ├── assets ├── data ├── extend_scaffold_crossdock.py ├── fpscores.pkl.gz ├── generate_pocket_molecules.py ├── notebooks ├── sample_crossdock_mols.py ├── sample_from_pocket.py ├── sampling ├── src ├── train_anchor_predictor.py ├── train_frag_diffuser.py └── utils8 directories, 12 files 环境安装 conda create -n AutoFragDiff python3.10 conda activate AutoFragDiff 选择python3.10避免pytroch_lightning的版本兼容问题。 安装 rdkit, biopython等。 pip3 install rdkit conda install -c conda-forge openbabel conda install pytorch2.0.1 torchvision0.15.2 torchaudio2.0.2 pytorch-cuda11.8 -c pytorch -c nvidiapip install biopython1.75 pip install biopandas pip install networkx pip install py3dmol pip install scikit-learn pip install tensorboard pip install wandb pip install tqdm conda install pytorch-lightning# 以下是pytorch_lightning的参考模块 conda install pytorch-lightning1.6 -c conda-forge conda install -c conda-forge packaging pip install tqdm pip install pyyaml pip install protobuf pip install absl-pyconda install pyg -c pyg pip install meeko conda install -c bioconda vinaMeeko 读取 RDKit 分子对象并写入 PDBQT 字符串将对接输出转换为 RDKit 分子和 SD 文件而不会丢失键序在python中经常用于Vina对接的预处理和结果处理。 安装QuickVina2需要另外创建一个环境MGLTools: wget https://github.com/QVina/qvina/raw/master/bin/qvina2.1 chmod x qvina2.1 conda create -n MGLTools -c bioconda mgltools 安装AutoDockTool python -m pip install githttps://github.com/Valdes-Tresanco-MS/AutoDockTools_py3 安装fpocket在生成分子时用于确定口袋 conda config --add channels conda-forge conda install fpocket 注意在macOS下面mgltools源和fpocket没有符合的包不适配macOS系统。。。因此建议本项目使用ubuntu系统测试。 以下均为ubuntu的测试结果。另外这个项目由于提供的是pip安装方式并且没有明确的版本信息pygtorch等安装包是相互之间有版本依赖关系的因此安装起来会困难一些多尝试就好。 3.2 下载作者训练好的checkpoint 作者训练完成的checkpoint文件下载 作者提供了训练好的模型checkpoint链接为https://drive.google.com/drive/folders/1DQwIfibHIoFPGJP6aHBGiYRp87bCZFA0 将两个checkpoint都下载然后放置在./目录下。 3.3 生成分子测试 - 2z3h 作者提供了一个notebook形式的里面展示了crossdocked_pocket10第一个体系即2z3h的基于口袋的分子生成文件名为sample_for_pocket.ipynb。 sample_for_pocket.ipynb放置在./notebook文件夹内吗。因此首先将工作目录切换到./notebook内。 测试体系2z3h.pdb我已经提前下载到文件内其口袋附近结构如下图在晶体中原口袋内有一个小分子BLO我这里一并放上去了只作为展示用途作者提供的案例中并没有 首先使用fpcoket寻找口袋在终端运行 fpocket -f 2z3h.pdb 由于这里的2z3h.pdb只包含了口袋因此找到的口袋数量不多一个是小分BEO所在的位置序号为1一个在其背后序号为2如下图 对口袋进行加H生成2z3h_H.pdb终端运行如下命令 reduce -Quiet -NOFLIP 2z3h.pdb 2z3h_H.pdb 注我这的reduce是之前安装的AmberTools23。如果没有安装过需要安装reduce或者AmberTools23。当然也可以另外使用pymol等工具加氢以后保存成2z3h_H.pdb。 以下为sample_for_pocket.ipynb里面的内容。 首先导入相关模块 import numpy as np import pandas as pd import os from tqdm import tqdm from itertools import combinationsfrom rdkit import Chem import torch import time import shutil from pathlib import Path import torch.nn.functional as F import syssys.path.append(../)from utils.volume_sampling import sample_discrete_number from utils.volume_sampling import remove_output_files, run_fpocket, extract_values from utils.templates import get_one_hot, get_pocket from utils.templates import add_hydrogens, extract_hydrogen_coordinatesfrom src.lightning_anchor_gnn import AnchorGNN_pl from src.lightning import AR_DDPM from src.const import prot_mol_lj_rm, CROSSDOCK_LJ_RM from src.noise import cosine_beta_schedule from scipy.spatial import distance from Bio.PDB import PDBParser from Bio.PDB.Polypeptide import is_aa, three_to_onefrom analysis.reconstruct_mol import reconstruct_from_generated from analysis.vina_docking import VinaDockingTaskfrom rdkit.Chem import rdmolfiles from sampling.sample_mols import generate_mols_for_pocketfrom openbabel import openbabel import tempfilefrom utils.volume_sampling import extract_alpha_spheres_coords from utils.visuals import write_xyz_file, visualize_3d_pocket_molecule, get_pocket_mol设定原子电荷氨基酸的索引字典还有就是原子的范德瓦尔斯半径。 atom_dict {C: 0, N: 1, O: 2, S: 3, B: 4, Br: 5, Cl: 6, P: 7, I: 8, F: 9} idx2atom {0:C, 1:N, 2:O, 3:S, 4:B, 5:Br, 6:Cl, 7:P, 8:I, 9:F} CROSSDOCK_CHARGES {C: 6, O: 8, N: 7, F: 9, B:5, S: 16, Cl: 17, Br: 35, I: 53, P: 15} pocket_atom_dict {C: 0, N: 1, O: 2, S: 3} # only 4 atoms types for pocket amino_acid_dict {A: 0, C: 1, D: 2, E: 3, F: 4, G: 5, H: 6, I: 7, K: 8, L: 9, M: 10, N: 11, P: 12, Q: 13, R: 14, S: 15, T: 16, V: 17, W: 18, Y: 19} vdws {C: 1.7, N: 1.55, O: 1.52, S: 1.8, B: 1.92, Br: 1.85, Cl: 1.75, P: 1.8, I: 1.98, F: 1.47} 定义一个从PDB文件提取口袋的函数get_pocket 输出是pdb文件以及原子编号的字典即上述中的pocket_atom_dict 提取口袋原子的坐标pocket_coords以及原子one-hotpocket_one_hot。 def get_pocket(pdbfile, pocket_atom_dict, remove_HTrue, ca_onlyFalse):pdb_struct PDBParser(QUIETTrue).get_structure(, pdbfile)# find interacting pocket residues based on distance cutoff# 输入文件已为口袋的PDB文件无需进行距离判断仅需提取氨基酸即可pocket_residues []for residue in pdb_struct[0].get_residues():# 氨基酸坐标res_coords np.array([a.get_coord() for a in residue.get_atoms()])# 氨基酸仅使用标准氨基酸if is_aa(residue.get_resname(), standardTrue):pocket_residues.append(residue)# 氨基酸排序和对应的氨基酸类型pocket_ids [f{res.parent.id}:{res.id[1]} for res in pocket_residues]if ca_only:# 口袋仅使用CA原子表示try:pocket_one_hot []pocket_coords []for res in pocket_residues:for atom in res.get_atoms():if atom.name CA:pocket_one_hot.append(np.eye(1, len(amino_acid_dict),amino_acid_dict[three_to_one(res.get_resname())]).squeeze())pocket_coords.append(atom.coord)pocket_one_hot np.stack(pocket_one_hot)pocket_coords np.stack(pocket_coords)except KeyError as e:raise KeyError(f{e} not in amino acid dict ({pdbfile}))else: # 全原子full_atoms np.concatenate([np.array([atom.element for atom in res.get_atoms()]) for res in pocket_residues], axis0)full_coords np.concatenate([np.array([atom.coord for atom in res.get_atoms()]) for res in pocket_residues], axis0)full_atoms_names np.concatenate([np.array([atom.get_id() for atom in res.get_atoms()]) for res in pocket_residues], axis0)pocket_AA np.concatenate([([three_to_one(atom.get_parent().get_resname()) for atom in res.get_atoms()]) for res in pocket_residues], axis0)# removing Hs if presentif remove_H:# 删除H原子h_mask full_atoms Hfull_atoms full_atoms[~h_mask]pocket_coords full_coords[~h_mask]full_atoms_names full_atoms_names[~h_mask]pocket_AA pocket_AA[~h_mask]try:pocket_one_hot []for i in range(len(full_atoms)):a full_atoms[i]aa pocket_AA[i]atom_onehot np.eye(1, len(pocket_atom_dict), pocket_atom_dict[a.capitalize()]).squeeze()amino_onehot np.eye(1, len(amino_acid_dict), amino_acid_dict[aa.capitalize()]).squeeze()is_backbone 1 if full_atoms_names[i].capitalize() in [N,CA,C,O] else 0# 关于pocket_one_hot使用了原子类型氨基酸类型是否是骨架三种信息pocket_one_hot.append(np.concatenate([atom_onehot, amino_onehot, (is_backbone,)]))pocket_one_hot np.stack(pocket_one_hot)except KeyError as e:raise KeyError(f{e} not in atom dict ({pdbfile}))pocket_one_hot np.array(pocket_one_hot)return pocket_one_hot, pocket_coords 定义输入的pdb名字以及运行设备 pdb 2z3h.pdb dev cuda:0 # cuda device 指定口袋fpocket找到的序号为1的口袋上文中canya色 定义生成分子数 k 1 # pocket number identified by fpocket pqr_file pdb[:-4] _out/pockets/pocket str(k) _vert.pqr n_samples 20 # number of samples to generate 生成10个分子 提取口袋原子坐标以及原子的one-hot以及fpocket填充的球的坐标 pocket_onehot, pocket_coords get_pocket(pdb, pocket_atom_dict, remove_HTrue, ca_onlyFalse)# use fpocket to identify the protein pocket # NOTE: -------------------------- # fpocket can sometimes give you the wrong pocket, make sure to check the output and visualize the pockettry:if not os.path.exists(pdb[:-4] _out):#shutil.rmtree(pdb[:-4] _out, ignore_errorsTrueprint(running fpocket...)run_fpocket(pdb)pqr_file pdb[:-4] _out/pockets/pocket str(k) _vert.pqralpha_spheres np.array(extract_alpha_spheres_coords(pqr_file))except:raise ValueError(fpocket failed!) 创建口袋的grid 分辨率为1.5A # --------------- make a grid box around the pocket ---------------- min_coords pocket_coords.min(axis0) - 2.5 # max_coords pocket_coords.max(axis0) 2.5# 每个球的半径都是1.5 x_range slice(min_coords[0], max_coords[0] 1, 1.5) # spheres of radius 1.5 (vdw radius of C) y_range slice(min_coords[1], max_coords[1] 1, 1.5) z_range slice(min_coords[2], max_coords[2] 1, 1.5)grid np.mgrid[x_range, y_range, z_range] grid_points grid.reshape(3, -1).T # This transposes the grid to a list of coordinates 提取fpocket生成的α球的坐标 # make sure the pocket-number is correct and you identified the correct pocket pqr_file pdb[:-4] _out/pockets/pocket str(k) _vert.pqr # 提取fpocket填充的α球的坐标 alpha_spheres np.array(extract_alpha_spheres_coords(pqr_file)) 计算小分子生长空间的grid利用fpocket的α球的3A范围内且不得与口袋的grid距离小于2A。 distances_spheres distance.cdist(grid_points, alpha_spheres) mask_spheres (distances_spheres 3).any(axis1) filtered_alpha_points grid_points[mask_spheres]# remove grid points that are close to the pocket # 删除小分子空间中距离口袋太近的格点阈值为2A。 pocket_distances distance.cdist(filtered_alpha_points, pocket_coords) mask_pocket (pocket_distances 2).any(axis1) grids filtered_alpha_points[~mask_pocket]# 小分子生长空间的格点 grids torch.tensor(grids)口袋H原子以及grid list # 生长分子时口袋加H含有H原子 add_H Trueif add_H:#add_hydrogens(pdb)prot_name_with_H pdb[:-4] _H.pdb# 提取H原子的坐标H_coords extract_hydrogen_coordinates(prot_name_with_H)H_coords torch.tensor(H_coords).float().to(dev)all_grids [] # list of grids all_H_coords [] for i in range(n_samples):all_grids.append(grids) all_H_coords.append(H_coords) 口袋大小采样生成的每个分子的最大原子数 pocket_vol len(grids) max_mol_sizes [] # 采样每个分子最大原子数 for i in range(n_samples):max_mol_sizes.append(sample_discrete_number(pocket_vol))pocket_size len(pocket_coords)max_mol_sizes np.array(max_mol_sizes) print(maximum molecule sizes, max_mol_sizes) 定义一个LJ相互作用的调度器和参数因为在分子生成过程中使用到了LJ相互作用的引导以避免分子与口袋的碰撞。 # scheduler and parameters for LJ guidance (avoiding clashes with pocket) prot_mol_lj_rm torch.tensor(prot_mol_lj_rm).to(dev) mol_mol_lj_rm torch.tensor(CROSSDOCK_LJ_RM).to(dev) / 100lj_weight_scheduler cosine_beta_schedule(500, s0.01, raise_to_power2) weights 1 - lj_weight_scheduler weights np.clip(weights, a_min0.1, a_max1.) 从口袋原子中采样anchor原子的序号条件是与fpocket中的α球的距离小于4.5A距离最近的7个口袋原子中随机产生。 alpha_spheres_pocket_distances distance.cdist(pocket_coords, alpha_spheres) possible_pocket_anchors np.argsort((alpha_spheres_pocket_distances 4.5).sum(1))[::-1][:7] pocket_anchors np.random.choice(possible_pocket_anchors, sizen_samples, replaceTrue) 先可视化一下口袋 创建口袋的mol对象 pocket_mol get_pocket_mol(pocket_coords, pocket_onehot) 可视化口袋 visualize_3d_pocket_molecule(pocket_mol, molNone, spinFalse, optimize_coordsFalse, sphere_positions2alpha_spheres.tolist(), sphere_positions1pocket_coords[possible_pocket_anchors].tolist()) 按照默认配置口袋原子为灰色anchor原子为绿色fpocket产生的α球为黄色 加载模型加载口袋原子的坐标one-hot。 注意 checkpoint要先下载完毕然后放置在./目录上不是当前的运行目录。 pocket_onehot torch.tensor(pocket_onehot).float() pocket_coords torch.tensor(pocket_coords).float()model AR_DDPM.load_from_checkpoint(../pocket-gvp.ckpt, devicedev) model model.to(dev)anchor_model AnchorGNN_pl.load_from_checkpoint(../anchor-model.ckpt, devicedev) anchor_model anchor_model.to(dev) 有了口袋原子坐标机器one-hot 还有口袋anchor原子的one-hot生成每个分子的最大原子数以及口袋的grid范围然后可运行autodifffrag生成分子。 设定每个分子最多由8个片段组成。 # 运行autofragdiff最大生成8个片段 max_num_frags 8 x, h, mol_masks generate_mols_for_pocket(n_samplesn_samples,num_fragsmax_num_frags,pocket_sizepocket_size,pocket_coordspocket_coords,pocket_onehotpocket_onehot,lig_coordsNone,anchor_modelanchor_model,diff_modelmodel,devicedev,return_allFalse,max_mol_sizesmax_mol_sizes,all_gridsall_grids,rejection_samplingFalse,pocket_anchorspocket_anchors,lj_guidanceTrue,prot_mol_lj_rmprot_mol_lj_rm,mol_mol_lj_rmmol_mol_lj_rm,all_H_coordsall_H_coords,guidance_weightsweights) 将AutoFragDiff生成的原子坐标及原子one-hot转化为rdkit的mol对象 x x.cpu().numpy() h h.cpu().numpy() mol_masks mol_masks.cpu().cpu().numpy()# convert to SDF all_mols [] for k in range(len(x)):mask mol_masks[k]h_mol h[k]x_mol x[k][mask.astype(np.bool_)]atom_inds h_mol[mask.astype(np.bool_)].argmax(axis1)atom_types [idx2atom[x] for x in atom_inds]atomic_nums [CROSSDOCK_CHARGES[i] for i in atom_types]try:mol_rec reconstruct_from_generated(x_mol.tolist(), atomic_nums)all_mols.append(mol_rec)except:continue 查看生成的分子 visualize_3d_pocket_molecule(pocket_mol, molall_mols[0], spinFalse, optimize_coordsFalse) 输出 将生成的分子rdkit对象保存成sdf文件命名为generated_mols.sdf。 # 保存成sdf文件 sdf_path ./generated_mols.sdf writer Chem.SDWriter(sdf_path) for mol in all_mols:writer.write(mol) writer.close() 虽然定义让AutoFragDiff生成20个分子但实际上只生成了19个。生成的19分子见如下视频 上传审核中 这个体系在之前的DrugGPS测评的文章中有测试过DrugGPS生成的分子严重偏小而AutoFragDiff很好的解决了这个问题。 3.4 生成分子测试-3WZE 接下来对我们之前的3WZE体系进行测试。3WZE是一个激酶底物口袋如下图。 采样与之前3.3类似的方法生成分子如下视频 上传审核中 生成分子的2D结构如下图 参考分子如下图 从上述结果来看部分分子还有有点类药同时有的分子的位置很好位于参考分子的空间。生成分子的构象还是比较合理。 但是大量的分子不类药同时存在很多CO基团。此外也存在明显的为完全占据口袋的情况。 3.5 命令行生成分子 注意reduce的路径要先设置好否则会报错如下 File /home//AutoFragDiff/sampling/sample_mols.py, line 103, in generate_mols_for_pocket all_H_coords[l] all_H_coords[l] - anchor_pos[l] RuntimeError: The size of tensor a (0) must match the size of tensor b (3) at non-singleton dimension 0 这是因为口袋没有加氢成功。 在输出信息中会出现sh: reduce: command not found 在utils.templates.py文件中设置好reduce的路径。即将add_Hydrogens函数修改为reduce的路径按照自己的环境设置 def add_hydrogens(pdf_file):Add hydrogens to a PDB file using reduce.#print(adding hydrogens)out_pdb pdf_file[:-4] _H.pdbos.system(f~/anaconda3/envs/AmberTools23/bin/reduce -Quiet -NOFLIP {pdf_file} {out_pdb}) 然后再./目录上运行如下命令为3WZE口袋生成分子。3WZE.pdb要先放置在./目录中 python sample_from_pocket.py \--results-path results \--pdb 3WZE.pdb \--anchor-model \anchor-model.ckpt \--diff-model pocket-gvp.ckpt \--n-samples 10 \--device cuda:0 \--pocket-number 1 生成输出信息如下 生成的分子保存在./results路径中sdf文件名为pocket__mols.sdf。因为用的上面的3WZE体系生成结果类似就不重复展示了。 3.6 扩展分子骨架 作者提供了为crossdock扩展分子骨架的代码在./目录下运行如下函数注这一部分需要先下载好数据集 python extend_scaffold_crossdock.py \--data-path ./data/CROSSDOCK \--results-path scaffold-gen \--anchor-model anchor-model.ckpt \--n-samples 20 \--exp-name scaffold-gen \--diff-model pocket-gvp.ckpt \--device cuda:0 每个体系生成20个分子。运行输出示例 每个体系生成的分子保存在.//scaffold-gen/scaffold-gen路径中默认crossdock测试集中的每个体系生成20个分子。 这里我选择测试集中的第二个体系GLMU_STRPN_2_459_0 口袋为4aaw_A_rec_4ac3_r83_lig_tt_min_0_pocket10.pdb 原先的小分子为4aaw_A_rec_4ac3_r83_lig_tt_min_0.sdf如下图 代码会自动识别骨架然后在骨架基础上进行拓展。拓展生成的20个分子的2D结构如下图 大部分的骨架拓展都失败了只成功扩展了4个分子。 而之前的参考分子为 首先分子扩展的范围不完整成功率也比较低。扩展的程度未达到参考分子的状态。更多例子大家可以在./scaffold-gen/scaffold-gen文件夹内查看。 四、测评总结 在口袋条件下基于自回归扩散模型的3D分子生成方法很多例如TargetDiff很常见。基于分子片段库的3D分子生成方法也有例如: FLAG和DrugGPS。 基于分子片段的3D分子生成扩散模型比较少见AutoFragDiff将基于分子片段和扩散模型结合起来了允许分子库中每一个分子片段在采样过程中经历去噪过程。这一点还是比较有意思的创新性十足。AutoFragDiff既不是传统扩散模型的直接0,1采样噪声也不是基于片段那样子预测是哪一个片段。 AutoFragDiff充分利用了扩散模型的强可扩展性与基于分子片段生成分子的高可成药性。但是在文章展现的结果中并没有那么理想成药性上还有SA打分上并没有超越SBDD等模型这一点值得思考。我们的案例测试结果也显示生成的分子比较奇怪。 感觉是分子库中每一个分子片段经历去噪过程的方式不对只用在了初始化中在后面的去噪过程中这些分子片段的信息被覆盖了所以效果不佳。
http://www.pierceye.com/news/592118/

相关文章:

  • 做设计什么网站平台好点做私活河南省建设厅53号文
  • 酷网站欣赏mit网站可以做app
  • 网站建设公司哪家好 都来磐石网络推广软件平台排行榜
  • 个人博客网站开发毕业设计东莞建设网站官网住房和城乡
  • 怎么下载网站的视频室内设计专业网站
  • 和幼儿做网站爱wordpress主题简
  • wordpress 大型网站吗怎么做网站超市
  • 太原建设厅官方网站做电商需要准备多少钱
  • 公司网站建设安全的风险wordpress t1主题
  • 手机下载视频网站模板下载失败杭州做网站五
  • 招聘wordpress网站高手兼职wordpress会员付费插件
  • 网站建设综合报告威海网站建设兼职
  • 做的网站浏览器提示不安全网站开发四川
  • 高端网站设计有哪些企业网站开发php
  • php网站模块网站建设协议 模板
  • 怎么做像知乎一样的网站网络营销案例分析模板
  • 网站开发 h5 h4网站运作模式
  • 竞彩网站开发那些市区做网站群
  • 建投五公司网站找苏州网站建设
  • 徐州IT兼职网站开发中国做陶壶的网站有哪些
  • WordPress模板转换typecho郑州搜索引擎优化
  • 个人怎么做贷款网站什么是网络营销产品
  • 网站你的后台管理系统用什么做外包公司与劳务派遣区别
  • 设计师资源网站价格低油耗低的车
  • 中山快速做网站服务wordpress建站ftp
  • 做酒类直供网站行吗网站seo检测报告
  • 南昌建站费用网站建设出错1004
  • 十堰做网站的公司阿里巴巴外贸网站论坛
  • 品牌网站建设代理网站建设公司易下拉软件
  • 移动网站模板响应式网站开发教程pdf