網頁

2019年9月21日 星期六

ubuntu 18.04 install tensorflow 1.14.0

安裝tensorflow之前要先確認python3、pip、pip3的環境設定,由於我們在執行tensorflow或Keras都是呼叫python3,所以我們必須確認pip、pip3哪個環境設定是和python3相同,否則在安裝tensorflow以及Keras會發生找不到Module的情形發生。

ubuntu 18.04 install cuDNN

NVIDIACUDA®深度神經網路函式庫(cuDNN)是GPU加速的用於深度神經網絡的原語庫。 cuDNN在執行上提供了高度優化的能力,像是在forward和backward卷積,池化,normalization和activation layers。以下是安裝流程:

2019年9月20日 星期五

PBS

鳥哥 簡易 Cluster 架設
http://linux.vbird.org/linux_server/0600cluster.php

鳥哥的 Linux 私房菜 -- 伺服器架設篇目錄http://linux.vbird.org/linux_server/index_old.php

Centos 7詳細網站
https://www.server-world.info/en/note?os=CentOS_7&p=nis&f=1

CentOS下torque集群配置
https://blog.csdn.net/Dream_angel_Z/article/details/44225669
https://blog.csdn.net/Dream_angel_Z/article/details/44225713
https://blog.csdn.net/Dream_angel_Z/article/details/44226055?locationNum=8&fps=1
https://blog.csdn.net/dream_angel_z/article/details/44226179

PBS script
https://csc.cnsi.ucsb.edu/docs/example-scripts-running-jobs

NFS為Network File System,可以把本地的目錄共享給指定IP域的主機,想要訪問共享目錄的主機可以將共享目錄掛在到本地進行直接訪問
http://linux.vbird.org/linux_server/0330nfs.php
https://qizhanming.com/blog/2018/08/08/how-to-install-nfs-on-centos-7
NIS為Network Information Service,可以為多態用戶創建統一的用戶登錄機制,使多個主機可以使用相同的用戶登錄到網絡中,對共享目錄進行讀寫操作
http://linux.vbird.org/linux_server/0430nis.php
https://blog.csdn.net/younger_china/article/details/53130780

RSH
在我們的 Linux 主機上面工作,通常使用 BASH 這個 shell 來傳達給 kernel 工作的訊息,以使主機正確的工作;而如果在不同的主機之間,那就可以使用 R Shell 來進行指令的下達喔,如此一來,我們就可以直接在 A 機器,向 B 機器下達工作的指令,而不需要登入 B 機器呢~那就是 RSH 的主要功能啦!最常見的 RSH 指令就是 rcp 與 rsh 了!有興趣的朋友應該知道以 man 來查尋一下該指令的用法囉!
需要附帶一提的是,這個 RSH 是『相當危險』的一個服務喔!由於我們可以直接登入 RSH 主機,並且在上面進行指令的下達,為了避免還要輸入密碼的問題,因此通常 RSH 已經將信任主機設定好了,不過,由於 RSH 會啟動一些 port 來監聽 Clients 的需求,而偏偏這些 port 與 daemon 都還挺危險的,因此,『Cluster 最好是設定在內部網域當中,並使用私有 IP ,比較能夠避免危險』喔!此外,那個 Master 也必須要設定好一定程度的嚴密防火牆喔!
http://linux.vbird.org/linux_server/0600cluster.php

Installing Torque 6.0.1 on CentOS 7
https://www.webmo.net/support/torque.html

Centos下搭建MPI集群計算環境
https://www.iczc.me/post/building-an-MPI-cluster-with-Centos/


https://www.webmo.net/support/torque.html
https://www.wandouip.com/t5i267150/
http://blog.sciencenet.cn/blog-548899-720364.html
http://staff.pccu.edu.tw/~lchou/reference/cluster_doc/ClusteringQueueingSystem(Cmeta).pdf
https://wiki.archlinux.org/index.php/TORQUE#NFS

VSCode 如何提高我的寫扣效率

https://larrylu.blog/vscode-tips-fe3320f9032a

2019年9月16日 星期一

在這篇文章中將展示如何將自然語言處理中的特徵與傳統特徵(元資料, meta data)結合在一個單一的keras模型(端到端學習,end-to-end learning)中。 解決方案是多輸入模型。

Generating Molecules with the Help of Recurrent Neural Networks

傳統藥物開發分兩個階段進行; 發現階段和發展階段。 一旦發現某種疾病的目標或根本原因/機制,我們需要識別化合物並驗證這些化合物是否可以阻止或抑制這些疾病的活動。 對於每5000種化合物測試,只有一種具有初始的積極效果,對於那些我們對其毒性或其他生理化學特徵沒有基本了解的化合物。 這使得工作漫長而艱鉅,幾乎沒有結果。 與此同時,數百萬人正在死於這些疾病。 這主要是因為為什麼投資大多數製藥公司不如將您的儲蓄存入高息賬戶。
但是,我們如何嘗試加速我們識別某些目標效應的化合物的方式? 在這種情況下,這就是生成網絡領域迅速普及,以幫助使用諸如RNN之類的網絡生成新分子的地方。 目標是通過去除盡可能多的過程來加速發現階段的過程,我們必須通過重新藥物設計(de novo drug design)手動測試大量化合物來識別有效的化合物。

Project De Novo: Generating Novel Molecules

Each colour corresponds to a sequence of characters in a SMILES string

本文目標是使用遞歸神經網絡(RNN)生成新的分子。 De novo僅僅意味著從更簡單的分子合成新的複雜分子。 然而,有一個主要的警告:我們不知道這些分子有多麼有用,甚至它們的正確性,但在本文的最後會提到我們可以擴展這個模型的方法來做到這一點。 我們的想法是訓練模型學習SMILES字串中的模式,以便生成的輸出可以匹配有效的分子。 SMILES只是根據結構和不同組成的分子表示成字串(String),並且有助於讓電腦理解分子表示式。

from rdkit import Chem
from rdkit.Chem import Draw

import matplotlib.pyplot as plt
%matplotlib inline

penicillin_g_smiles = 'CC1([C@@H](N2[C@H](S1)[C@@H](C2=O)NC(=O)Cc3ccccc3)C(=O)O)C'

penicillin_g = Chem.MolFromSmiles(penicillin_g_smiles)

Draw.MolToMPL(penicillin_g, size=(200, 200))

參考
https://chemistry.stackexchange.com/questions/43299/is-there-a-way-to-use-free-software-to-convert-smiles-strings-to-structures/57358

此外,有個網站也可以將化學結構翻譯成SMILES字串:
https://cactus.nci.nih.gov/

由於我們將文本作為數據提供到RNN神經網絡,因此RNN是用於生成新SMILES字符串的最佳網絡。 大多數論文和研究人員建議使用LSTM增強RNN的內部結構,LSTM是一種更有效訓練文本的神經網路。 因此,我們將使用2 LSTM層,在100,000個SMILES字符串的數據集上進行訓練。

Stage 1 — Mapping
該項目的第一階段是創建一個將字元映射到整數,以便RNN可以處理數據,反之,也可以將結果和輸出轉換回字元時。 我們需要創建一組所有獨特字串,並enumerate(為每個字元定義一個數值)每個項目。 SMILES字串由兩種類型的字元組成,它們是特殊字元,如“/”或“=”,以及元素符號,如“P”,“Si”,“Mg”等。我們將這些enumerate的獨特字元放入一個 獨特的字典,

unique_chars = sorted(list(set(raw_text)))
char_to_int = dict((c, i) for i, c in enumerate(unique_chars))
char_to_int.update({-1 : "\n"})

這裡合併“\ n”表示為.txt文件中的新行。

Stage 2— Data Preprocessing
一旦我們為字元映射創建了字典,我們就會呼叫字典char_to_int將SMILES字串數據集中的每個字元轉換為整數。 Normalization是將字元的每個整數值除以數據集中獨特字元的數量。 然後,我們使用NumPy將輸入陣列X reshape為[樣本,時間步長,生理化學特徵]的三維陣列,這是循環模型的預期輸入格式。 輸出變量Y是one-hot encoding,以在訓練模型後生成新的SMILES。 One-hot encoding適用於整數表示,並且刪除整數編碼變量,並為每個獨特的整數值添加一個新的二進制(0或1)變量。

Stage 3— Model Architecture



The Model Architecture, consisting of two LSTM layers with 256 units (Gupta et al.)

這個系統結構的設計是根據Gupta等人的研究論文“De Novo Drug Design的Generative Recurrent Networks”。採用這種架構,因為它在創建有效的SMILES字串時產生了97%的準確率,而且它是一個非常簡單的架構。它由兩個LSTM層組成,每個層都有一個隱藏的狀態向量H,它透過一個單元傳遞先前的資訊給下一個單元,這是RNN以前從未見過的。像這樣的更多循環連接允許網絡理解SMILES序列的更複雜的依賴性。這些層上使用0.25的壓差正則化,接著是使用softmax激活函數的neutron組成密集輸出層。 Softmax是一個函數,它將K個實數的向量(在我們的例子中是輸出向量Y)作為輸入,並將其normalize為由K個概率組成的概率分佈。

# Create the model (simple 2 layer LSTM)
model = Sequential()
model.add(LSTM(128, input_shape=(X.shape[1], X.shape[2]), return_sequences = True))
model.add(Dropout(0.25))
model.add(LSTM(256, return_sequences = True))
model.add(Dropout(0.25))
model.add(LSTM(512, return_sequences = True))
model.add(Dropout(0.25))
model.add(LSTM(256, return_sequences = True))
model.add(Dropout(0.25))
model.add(LSTM(128))
model.add(Dropout(0.25))
model.add(Dense(Y.shape[1], activation='softmax'))

隨意添加更多層或更改dropout rate,但請記住,在NN(神經網絡)中有更多層和神經元,在計算上它獲得的強度和準確度越高。

Stage 4— Training:
這裡的神經網絡使用categorical cross entropy作為loss function,以及Adam Optimizer。 包含100,000個SMILES字串的數據集=訓練了10個epochs的模型以及512 batch_size來學習。 這裡的經驗法則是更多的epochs +更小的batch_size =更好地理解數據,但代價是需要更長的訓練時間。 我們還可以利用檢查點(checkpoints),它是Keras函式庫中的內建功能來保存我們的訓練進度,以及每個epoch的模型權重,以便稍後傳輸或保存。
# Define checkpoints (used to save the weights at each epoch, so that the model doesn't need to be retrained)
filepath="weights-improvement-{epoch:02d}-{loss:.4f}.hdf5"checkpoint = ModelCheckpoint(filepath, monitor = 'loss', verbose = 1, save_best_only = True, mode = 'min')
callbacks_list = [checkpoint] # Fit the model
model.fit(X, Y, epochs = 19, batch_size = 512, callbacks = callbacks_list) """TO TRAIN FROM SAVED CHECKPOINT"""
# Load weights
model.load_weights("weights-improvement-75-1.8144.hdf5") # load the model
new_model = load_model ("model.h5") assert_allclose(model.predict(x_train),new_model.predict(x_train), 1e-5) # fit the model
checkpoint = ModelCheckpoint(filepath, monitor='loss', verbose=1, save_best_only=True, mode='min')
callbacks_list = [checkpoint]new_model.fit(x_train, y_train, epochs = 100, batch_size = 64, callbacks = callbacks_list)

Stage 5 — Generating New Molecules:
生成新分子相當簡單。 首先,我們加載預先訓練的權重,這樣我們就可以避免每次在生成新的SMILES字串之前訓練模型。 然後,我們從數據集中隨機選擇一個SMILES字串作為參考字串,並在範圍內生成指定數量的字元,並將整數值轉換回字元。 上面的代碼在技術上可以用於生成任何類型的文本,無論是故事,音樂還是SMILES分子。 根據自定義調整,學習速率,數據集大小和quality,結果會有所不同,但最後我們應該得到一種有效的分子表示字串。 在進行學習新的子結構和分支(N1CCN(CC1)C(C(F)=C2…)分子之前,模型可以藉由僅生成一個字符(NNNNNN)的序列開始。

這是分子二維結構 (O1C=C[C@H([C@H]1O2)c3c2cc(OC)c4c3OC(=O)C5=C4CCC(=O)5)



和三維結構:
O1C=C[C@H]([C@H]1O2)c3c2cc(OC)c4c3OC(=O)C5=C4CCC(=O)5



Possible Improvements
1. Checking the Validity of these Molecules:
我們不知道我們生成的分子是否具有任何用例, 我們必須藉由用於訓練的原始分子進行比較來驗證這些生成的分子是否是有效的分子結構。 藉由計算數據的共同生理化學特徵,以及對訓練數據的特徵使用主成分分析(Principal Component Analysis),我們可以確定新生成的分子是否相應地進行了轉換。

2. Are SMILES Strings even the most optimal way to represent molecules?: 
如何確信LSTMs可以在最好的情況下生成文本的樣本,因為SMILES字串只是查看分子化學組成的基本方法。 我們可能會創建更好的方法來表示分子的複雜性,以便將來進行更準確的測試。 然而,目前,SMILES Strings和RNN是使用機器學習產生分子的規範。

3. The Dataset: Through data augmentation
我們可以採用不同SMILES字串的排列,並將它們添加到我們的數據集中。 增加數據集的另一種方法是enumerate SMILES字符串超出其原始形式,或以其他方式編寫。



Changing Drug Discovery: Fragment-Based Drug Discovery (FBDD)




這種產生分子的方法的主要用途之一是基於片段的藥物發現或FBDD。 這是在不使用哨兵(使用其存在作為終止條件的特殊值或特徵)開始輸入的地方,我們可以從已知結合目標疾病機制的片段開始。 通過將這個片段的SMILES字串作為輸入,我們可以用RNN逐漸“生長”分子的其餘部分,從而產生更有效地抵消某種功能的分子! 這種方法肯定有很多希望,並且看起來將來會被更多地使用會很有趣。

Conclusion + Key Takeaways
RNN僅使用數據集上的少量參數來提供了一種簡單而有效的分子生成方法。 該領域的大多數研究都希望結合RL或對抗性訓練等結構,以幫助增加產生的有效分子的數量,或使模型偏向於創造具有特定藥物某些特性的分子。 希望在未來採用這種方法,基於片段的藥物發現變得更加普遍,並有助於使藥物開發更加可行和經濟。 AI是移除創造療法的猜測的關鍵。

Key Takeaways
1. 緩慢而昂貴的藥物開發和材料科學研究是目前方法進展緩慢的直接結果
2. 使用機器學習,我們可以提高研發的速度。
3. 機器學習用於生成分子的最有效用途是使用RNN和SMILES分子字符串表示,但它們不是最佳方式。
4. 我們還有很長的路要走,才能使用人工智能以更快的速度製作更準確有效的分子結構,但還有很多值得期待的東西!



https://towardsdatascience.com/generating-molecules-with-the-help-of-recurrent-neural-networks-c3fe23bd0de2

Fallacy of using AUC as a model selection criteria

https://medium.com/@rajneeshtiwari_22870/fallacy-of-using-auc-as-a-model-selection-criteria-d6bf50f4de0d

2019年9月10日 星期二

Learn What is Range in Python With Examples

https://www.edureka.co/blog/range-in-python/?utm_source=facebook&utm_medium=crosspost&utm_campaign=social-media-090919-mw&fbclid=IwAR1AEj0ujC9Wl1kpPVooR_hAeswgrhScjffWl_AKT18bLxAeK_sVGVBx2bA

A reactive force field implementation in LAMMPS

LAMMPS在reax範例中的input腳本(in.CHO)
https://github.com/lammps/lammps/blob/master/examples/reax/CHO/in.CHO

# REAX potential for CHO system
# .....
units  real
atom_style charge

read_data data.CHO

pair_style reax/c lmp_control
pair_coeff * * ffield.reax.cho H C O

neighbor 2 bin
neigh_modify every 10 delay 0 check no

fix  1 all nve
fix             2 all qeq/reax 1 0.0 10.0 1e-6 param.qeq
fix             3 all temp/berendsen 500.0 500.0 100.0

timestep 0.25

#dump  1 all atom 30 dump.reax.cho

run  3000

其中data檔(data.CHO)為
https://github.com/lammps/lammps/blob/master/examples/reax/CHO/data.CHO

# CHO example

105 atoms
3 atom types

0 25.000 xlo xhi
0 25.000 ylo yhi
0 25.000 zlo zhi

Masses

1 1.0080
2 12.0107
3 15.9994

Atoms

   1 2 0.0 10.67229  14.36836  12.47166
   2 1 0.0 11.02446  14.91550  13.35233
   3 1 0.0 11.02446  14.91549  11.59096
   4 1 0.0  9.57932  14.41980  12.47166
   5 2 0.0 11.17534  12.87608  12.47165
   6 1 0.0 10.79792  12.33546  13.34037
   7 1 0.0 10.79790  12.33545  11.60294
   8 2 0.0 12.75013  12.93134  12.47163
   9 1 0.0 13.13241  13.47175  11.60486
  10 1 0.0 13.13241  13.47210  13.33818
  11 2 0.0 13.22294  11.42815  12.47199
  12 1 0.0 12.83858  10.89166  11.60377
  13 1 0.0 12.83959  10.89255  13.34119
  14 2 0.0 14.79762  11.45137  12.47107
  15 1 0.0 15.21044  10.43808  12.47354
  16 1 0.0 15.19550  11.96345  11.58877
  17 1 0.0 15.19648  11.96815  13.35018
  18 2 0.0  0.24250   0.91354   1.10383
  19 1 0.0  0.97225   1.67509   1.39797
  20 1 0.0 24.87363   1.18825   0.11010
  21 1 0.0 24.39847   0.98637   1.79630
  22 2 0.0  0.86944  24.46895   1.11508
  23 1 0.0  1.21047  24.19771   2.11484
  24 1 0.0  0.12679  23.71752   0.84453
  25 2 0.0  2.06454  24.48829   0.08825
  26 1 0.0  1.72846  24.75977  24.08683
  27 1 0.0  2.80951   0.23920   0.35408
  28 2 0.0  2.67036  23.03401   0.12171
  29 1 0.0  1.92204  22.28680  24.85503
  30 1 0.0  3.00638  22.76782   1.12450
  31 2 0.0  3.87027  23.02208  24.10132
  32 1 0.0  4.35176  22.04072  24.06515
  33 1 0.0  3.54082  23.26189  23.08511
  34 1 0.0  4.63935  23.75310  24.37121
  35 2 0.0  1.37929  14.62909  17.52744
  36 1 0.0  1.08393  15.52196  18.08818
  37 1 0.0  2.47385  14.59977  17.52258
  38 1 0.0  1.05260  14.77122  16.49293
  39 2 0.0  0.76275  13.31937  18.14786
  40 1 0.0 24.67295  13.35030  18.12450
  41 1 0.0  1.04396  12.44064  17.56651
  42 2 0.0  1.30113  13.22425  19.62581
  43 1 0.0  2.39107  13.19385  19.65447
  44 1 0.0  1.02336  14.10169  20.21106
  45 2 0.0  0.66878  11.90830  20.21883
  46 1 0.0  0.94960  11.03396  19.63080
  47 1 0.0 24.57945  11.94426  20.18968
  48 2 0.0  1.19125  11.78568  21.69954
  49 1 0.0  0.79365  10.89123  22.18875
  50 1 0.0  2.28374  11.72162  21.74071
  51 1 0.0  0.89616  12.64769  22.30679
  52 2 0.0 11.41750   7.16471  22.76002
  53 1 0.0 11.74866   7.28340  21.72336
  54 1 0.0 11.72154   8.06612  23.30055
  55 1 0.0 11.97469   6.32478  23.18558
  56 2 0.0  9.86319   6.92474  22.85179
  57 1 0.0  9.57626   6.01094  22.33031
  58 1 0.0  9.54930   6.78307  23.88660
  59 2 0.0  9.17390   8.18942  22.21244
  60 1 0.0  9.45849   9.10599  22.73021
  61 1 0.0  9.48557   8.33580  21.17777
  62 2 0.0  7.62459   7.92132  22.31840
  63 1 0.0  7.31756   7.77569  23.35472
  64 1 0.0  7.34468   7.00469  21.79795
  65 2 0.0  6.90692   9.17258  21.68631
  66 1 0.0  5.81845   9.06496  21.71809
  67 1 0.0  7.15914  10.09632  22.21721
  68 1 0.0  7.18992   9.31630  20.63835
  69 2 0.0  4.69047  14.13340  23.48572
  70 1 0.0  4.95366  15.17281  23.26391
  71 1 0.0  5.39163  13.78010  24.24888
  72 1 0.0  4.87514  13.55000  22.57874
  73 2 0.0  3.19477  13.99798  23.95930
  74 1 0.0  2.50599  14.33002  23.18163
  75 1 0.0  2.93803  12.95591  24.15345
  76 2 0.0  3.05322  14.87431   0.26136
  77 1 0.0  3.74058  14.54651   1.04202
  78 1 0.0  3.30993  15.91730   0.07257
  79 2 0.0  1.55058  14.71961   0.71013
  80 1 0.0  1.29864  13.67531   0.89801
  81 1 0.0  0.86725  15.05003  24.92701
  82 2 0.0  1.37850  15.58633   2.01380
  83 1 0.0  0.35341  15.53527   2.39297
  84 1 0.0  2.04062  15.24695   2.81709
  85 1 0.0  1.60704  16.64178   1.83261
  86 3 0.0  8.51658  13.05007  22.43728
  87 3 0.0  9.43965  13.72051  21.88842
  88 3 0.0 18.16518   4.73455   8.81928
  89 3 0.0 18.65469   4.57291   7.66370
  90 3 0.0  6.43553  20.34119  24.80049
  91 3 0.0  6.44898  20.31621  23.53493
  92 3 0.0 21.90539  11.54301  19.82384
  93 3 0.0 20.76137  11.61918  20.36007
  94 3 0.0  3.42232  11.07545   5.77130
  95 3 0.0  3.88671  10.95299   4.60048
  96 3 0.0 11.93988   4.94134  20.86058
  97 3 0.0 12.98804   5.47798  20.39555
  98 3 0.0 14.08646   9.50799  20.80806
  99 3 0.0 14.09449  10.68237  20.33642
 100 3 0.0  3.45246  19.93144  16.38965
 101 3 0.0  2.86282  19.60263  15.31936
 102 3 0.0 12.85008  21.95287  13.63796
 103 3 0.0 12.06593  21.16486  14.24238
 104 3 0.0 24.47055   7.42219  14.24997
 105 3 0.0 24.43181   7.37102  12.98624

reax的建模需要注意的是units選取real,atom_style為charge

units  real
atom_style charge

讀取模型的數據文件,可以嘗試用MS輸出car格式,利用LAMMPS中的msi2lmp工具轉化為所需的數據文件

read_data data.CHO

接著選取potential類型,注意pair_style和pair_coeff應在read_data或create_box後

pair_style reax/c lmp_control
pair_coeff * * ffield.reax.cho H C O


neighbor 2 bin
neigh_modify every 10 delay 0 check no

上述命令中lmp_control為控製文件,用於控制輸出軌跡文件trj,若無需要可將其替換為NULL

ffield.reax.cho存放在Lammps的potential資料夾
https://github.com/lammps/lammps/tree/master/potentials
,在使用其他系統時,可以選用ADF軟件中的potential文件(可以直接使用)。

fix  1 all nve
fix             2 all qeq/reax 1 0.0 10.0 1e-6 param.qeq
fix             3 all temp/berendsen 500.0 500.0 100.0

對於reax的分子動力學模擬,必須有電荷守恆條件(fix qeq / reax),其中param.qeq存放所需原子的參數,從左到右分別為原子類型,電負性(eV),自庫倫勢,軌道指數

1 5.3200 14.8732 1.0206
2 5.8678 14.0000 0.9000
3 8.5000 17.9978 1.0503

上述數值也存在於potential文件中,因此可以將param.qeq替換為REAX/ C,如下圖所示:


其次在進行模擬時,一般可以選用NVT,如果系統分子個數比較少,應增大溫度加快反應進程(去掉fix 1和fix 3改為)

fix           1 all nvt temp 3500.0 3500.0 100.0

reax的分子動力學模擬,time step應在0.1-1.0之間,一般選取0.25

timestep 0.25

執行後若要製作動畫,應生成dump文件

dump        1 all custom mass type xs ys zs fx fy fz

畫圖檔指令

topo readlammpsdata data.CHO charge

2019年9月4日 星期三

Windows安裝tensorflow和Keras讓jupyter notebook可以執行

打開Anaconda Prompt,因為安裝anaconda時沒有指定環境變數,所以只能在Anaconda Prompt終端機呼叫conda
$ conda create -n tensorflow python=3.6
$ activate tensorflow
$ pip install tensorflow
$ pip install keras
$ pip install jupyter
$ jupyter notebook