Uni-Mol Predicts Solubility of Flow Battery
©️ Copyright 2023 @ Authors
Authors:
Qiming Xie 📨
Mingzheng Zhang 📨
Date: 2023-09-06
Sharing Agreement: This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Quick Start: Click the Start Connection button above, select the unimol-qsar:v0.1 image and any GPU node configuration, and wait a moment to run.
AIMS:
- Practical use of Uni-Mol for predicting solubility in redox flow batteries
- Understand the working modules of Uni-Mol
- Use a training method with SMILES strings as input
- Use regression models to predict continuous values
- Predict the solubility of some aqueous redox-active molecules in redox flow batteries using the trained model
Overview
1. Introduction
Aqueous organic redox flow batteries (AORFBs) show great potential as a large-scale energy storage technology, enabling efficient use of renewable energy. AORFBs use water-soluble organic redox-active molecules as electrolytes. These organic electrolytes have advantages such as abundant raw material sources, highly tunable performance, and fast kinetics, offering broader application prospects for redox flow batteries. However, organic redox-active molecules have limited solubility, electrolyte freezing, and slow reaction kinetics, which makes it challenging to maintain the performance of AORFBs under low temperatures [1].
2. Core Indicators of Redox Flow Batteries
The most critical performance indicator of redox flow batteries is energy density. The theoretical energy density of RFBs is derived from the following equation [2]:
Where: W is the energy density, Wh·L-1; n is the number of electrons participating in the redox reaction; C is the minimum concentration of redox-active species dissolved in the electrolyte, mol·L-1; F is the Faraday constant; V is the battery voltage, V; is the volume factor, =1+(concentration of the less soluble active species/concentration of the more soluble active species), and when concentrations are equal, =2.
Therefore, the energy density is determined by the solubility of the active species in the electrolyte, the redox potential, and the number of transferred electrons. Consequently, the main approaches to increasing energy density focus on increasing solubility, expanding the electrochemical window, and increasing the number of electron transfers. Combining these approaches with high-throughput computational methods to screen organic redox-active molecules can facilitate the successful development of the next generation of redox flow batteries.
3. Introduction to the RedDB Database
This project uses the RedDB [3] database, which contains 31,618 molecular data entries derived from the structural functionalization of 52 different core molecules. It includes results from two types of DFT calculations: OPT geometry optimization and SPE single-point energy, as well as solubility data predicted by the water solubility prediction model (AqSolPred v1.0) [4]. The solubility values in RedDB are expressed as dimensionless logarithms in mol/L, denoted as LogS.
4. Introduction to AqSolPred
AqSolPred integrates three machine learning methods and is trained on a database of 9,982 experimental solubility data points—AqSolDB. The model has a mean absolute error (MAE) of 0.348. AqSolPred has been previously validated on benchmark solubility datasets [6]. Its MAE of 0.348 LogS is lower than that of traditional cheminformatics and machine learning methods typically used for predicting chemical solubility in water [4]. The SMILES representation of molecules is used as input for AqSolPred, and the ML-predicted solubility data has been incorporated into RedDB.
5. Objectives
Use a training method with SMILES strings as input;
Use the Uni-Mol universal molecular learning framework to predict continuous values;
Use the trained model to predict the solubility of some aqueous redox-active compounds in redox flow batteries.
Step1:import Uni-Mol
import Uni-Mol's modules
Step 2: Input Data and Train (Optional)
Training may take a long time. The trained data (CSV files) have already been uploaded to the dataset, so those with limited time can skip this step.
2023-09-04 15:51:18 | unimol/data/datareader.py | 138 | INFO | Uni-Mol(QSAR) | Anomaly clean with 3 sigma threshold: 25294 -> 25293 2023-09-04 15:51:22 | unimol/data/conformer.py | 62 | INFO | Uni-Mol(QSAR) | Start generating conformers... 25293it [02:46, 151.98it/s] 2023-09-04 15:54:09 | unimol/data/conformer.py | 66 | INFO | Uni-Mol(QSAR) | Failed to generate conformers for 0.00% of molecules. 2023-09-04 15:54:09 | unimol/data/conformer.py | 68 | INFO | Uni-Mol(QSAR) | Failed to generate 3d conformers for 0.03% of molecules. 2023-09-04 15:54:09 | unimol/train.py | 88 | INFO | Uni-Mol(QSAR) | Output directory already exists: ./best_exp 2023-09-04 15:54:09 | unimol/train.py | 89 | INFO | Uni-Mol(QSAR) | Warning: Overwrite output directory: ./best_exp 2023-09-04 15:54:10 | unimol/models/unimol.py | 114 | INFO | Uni-Mol(QSAR) | Loading pretrained weights from /opt/conda/lib/python3.8/site-packages/unimol-0.0.2-py3.8.egg/unimol/weights/mol_pre_all_h_220816.pt 2023-09-04 15:54:10 | unimol/models/nnmodel.py | 103 | INFO | Uni-Mol(QSAR) | start training Uni-Mol:unimolv1 2023-09-04 15:55:22 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [1/50] train_loss: 0.1694, val_loss: 0.0961, val_r2: 0.9043, lr: 0.000267, 69.2s 2023-09-04 15:56:27 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [2/50] train_loss: 0.0543, val_loss: 0.0285, val_r2: 0.9716, lr: 0.000396, 63.7s 2023-09-04 15:57:32 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [3/50] train_loss: 0.0273, val_loss: 0.0284, val_r2: 0.9716, lr: 0.000388, 64.2s 2023-09-04 15:58:36 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [4/50] train_loss: 0.0210, val_loss: 0.0169, val_r2: 0.9831, lr: 0.000379, 63.1s 2023-09-04 15:59:44 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [5/50] train_loss: 0.0184, val_loss: 0.0140, val_r2: 0.9860, lr: 0.000371, 67.6s 2023-09-04 16:00:56 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [6/50] train_loss: 0.0151, val_loss: 0.0165, val_r2: 0.9835, lr: 0.000363, 71.0s 2023-09-04 16:01:59 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [7/50] train_loss: 0.0144, val_loss: 0.0121, val_r2: 0.9879, lr: 0.000355, 63.4s 2023-09-04 16:03:03 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [8/50] train_loss: 0.0126, val_loss: 0.0121, val_r2: 0.9878, lr: 0.000346, 63.7s 2023-09-04 16:04:07 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [9/50] train_loss: 0.0115, val_loss: 0.0169, val_r2: 0.9831, lr: 0.000338, 63.7s 2023-09-04 16:05:13 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [10/50] train_loss: 0.0103, val_loss: 0.0141, val_r2: 0.9858, lr: 0.000330, 65.6s 2023-09-04 16:06:19 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [11/50] train_loss: 0.0102, val_loss: 0.0122, val_r2: 0.9877, lr: 0.000322, 66.1s 2023-09-04 16:07:21 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [12/50] train_loss: 0.0092, val_loss: 0.0084, val_r2: 0.9917, lr: 0.000313, 62.2s 2023-09-04 16:08:26 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [13/50] train_loss: 0.0084, val_loss: 0.0087, val_r2: 0.9913, lr: 0.000305, 64.6s 2023-09-04 16:09:37 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [14/50] train_loss: 0.0074, val_loss: 0.0092, val_r2: 0.9908, lr: 0.000297, 70.3s 2023-09-04 16:10:44 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [15/50] train_loss: 0.0081, val_loss: 0.0113, val_r2: 0.9887, lr: 0.000289, 67.2s 2023-09-04 16:11:53 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [16/50] train_loss: 0.0069, val_loss: 0.0080, val_r2: 0.9920, lr: 0.000280, 69.3s 2023-09-04 16:12:57 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [17/50] train_loss: 0.0064, val_loss: 0.0090, val_r2: 0.9909, lr: 0.000272, 62.8s 2023-09-04 16:14:08 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [18/50] train_loss: 0.0057, val_loss: 0.0069, val_r2: 0.9931, lr: 0.000264, 71.6s 2023-09-04 16:15:12 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [19/50] train_loss: 0.0054, val_loss: 0.0069, val_r2: 0.9931, lr: 0.000256, 63.6s 2023-09-04 16:16:19 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [20/50] train_loss: 0.0056, val_loss: 0.0074, val_r2: 0.9926, lr: 0.000247, 65.7s 2023-09-04 16:17:21 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [21/50] train_loss: 0.0050, val_loss: 0.0071, val_r2: 0.9929, lr: 0.000239, 61.8s 2023-09-04 16:18:24 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [22/50] train_loss: 0.0046, val_loss: 0.0085, val_r2: 0.9916, lr: 0.000231, 63.6s 2023-09-04 16:19:29 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [23/50] train_loss: 0.0041, val_loss: 0.0061, val_r2: 0.9939, lr: 0.000223, 64.9s 2023-09-04 16:20:37 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [24/50] train_loss: 0.0040, val_loss: 0.0062, val_r2: 0.9938, lr: 0.000214, 67.2s 2023-09-04 16:21:41 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [25/50] train_loss: 0.0043, val_loss: 0.0061, val_r2: 0.9939, lr: 0.000206, 64.2s 2023-09-04 16:22:45 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [26/50] train_loss: 0.0037, val_loss: 0.0056, val_r2: 0.9944, lr: 0.000198, 63.6s 2023-09-04 16:23:57 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [27/50] train_loss: 0.0035, val_loss: 0.0057, val_r2: 0.9943, lr: 0.000190, 71.6s 2023-09-04 16:25:01 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [28/50] train_loss: 0.0033, val_loss: 0.0058, val_r2: 0.9942, lr: 0.000181, 64.2s 2023-09-04 16:26:06 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [29/50] train_loss: 0.0031, val_loss: 0.0056, val_r2: 0.9944, lr: 0.000173, 65.1s 2023-09-04 16:27:19 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [30/50] train_loss: 0.0030, val_loss: 0.0055, val_r2: 0.9945, lr: 0.000165, 72.3s 2023-09-04 16:28:31 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [31/50] train_loss: 0.0029, val_loss: 0.0049, val_r2: 0.9950, lr: 0.000157, 72.2s 2023-09-04 16:29:40 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [32/50] train_loss: 0.0028, val_loss: 0.0051, val_r2: 0.9949, lr: 0.000148, 67.9s 2023-09-04 16:30:45 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [33/50] train_loss: 0.0026, val_loss: 0.0051, val_r2: 0.9949, lr: 0.000140, 65.1s 2023-09-04 16:31:48 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [34/50] train_loss: 0.0026, val_loss: 0.0050, val_r2: 0.9950, lr: 0.000132, 62.8s 2023-09-04 16:33:04 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [35/50] train_loss: 0.0023, val_loss: 0.0049, val_r2: 0.9951, lr: 0.000124, 76.5s 2023-09-04 16:34:22 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [36/50] train_loss: 0.0022, val_loss: 0.0048, val_r2: 0.9952, lr: 0.000115, 76.7s 2023-09-04 16:35:30 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [37/50] train_loss: 0.0021, val_loss: 0.0050, val_r2: 0.9950, lr: 0.000107, 67.9s 2023-09-04 16:36:41 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [38/50] train_loss: 0.0020, val_loss: 0.0048, val_r2: 0.9951, lr: 0.000099, 70.6s 2023-09-04 16:37:53 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [39/50] train_loss: 0.0019, val_loss: 0.0046, val_r2: 0.9954, lr: 0.000091, 72.5s 2023-09-04 16:38:59 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [40/50] train_loss: 0.0020, val_loss: 0.0045, val_r2: 0.9955, lr: 0.000082, 64.9s 2023-09-04 16:40:03 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [41/50] train_loss: 0.0018, val_loss: 0.0046, val_r2: 0.9954, lr: 0.000074, 63.6s 2023-09-04 16:41:07 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [42/50] train_loss: 0.0018, val_loss: 0.0046, val_r2: 0.9954, lr: 0.000066, 64.4s 2023-09-04 16:42:10 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [43/50] train_loss: 0.0018, val_loss: 0.0045, val_r2: 0.9955, lr: 0.000058, 62.9s 2023-09-04 16:43:14 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [44/50] train_loss: 0.0016, val_loss: 0.0046, val_r2: 0.9954, lr: 0.000049, 63.2s 2023-09-04 16:44:16 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [45/50] train_loss: 0.0015, val_loss: 0.0045, val_r2: 0.9954, lr: 0.000041, 62.2s 2023-09-04 16:45:20 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [46/50] train_loss: 0.0015, val_loss: 0.0044, val_r2: 0.9956, lr: 0.000033, 63.6s 2023-09-04 16:46:29 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [47/50] train_loss: 0.0014, val_loss: 0.0044, val_r2: 0.9956, lr: 0.000025, 68.4s 2023-09-04 16:47:33 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [48/50] train_loss: 0.0014, val_loss: 0.0044, val_r2: 0.9956, lr: 0.000016, 64.3s 2023-09-04 16:48:37 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [49/50] train_loss: 0.0014, val_loss: 0.0045, val_r2: 0.9955, lr: 0.000008, 63.3s 2023-09-04 16:49:40 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [50/50] train_loss: 0.0013, val_loss: 0.0044, val_r2: 0.9956, lr: 0.000000, 63.5s 2023-09-04 16:49:41 | unimol/tasks/trainer.py | 213 | INFO | Uni-Mol(QSAR) | load model success! 2023-09-04 16:49:46 | unimol/models/nnmodel.py | 129 | INFO | Uni-Mol(QSAR) | fold 0, result {'r2': 0.9956226848041148, 'mae': 0.05991403, 'pearsonr': 0.9978418748820779, 'spearmanr': 0.9973003817239617, 'mse': 0.0075112535} 2023-09-04 16:49:46 | unimol/models/unimol.py | 114 | INFO | Uni-Mol(QSAR) | Loading pretrained weights from /opt/conda/lib/python3.8/site-packages/unimol-0.0.2-py3.8.egg/unimol/weights/mol_pre_all_h_220816.pt 2023-09-04 16:50:51 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [1/50] train_loss: 0.1861, val_loss: 0.0841, val_r2: 0.9168, lr: 0.000267, 64.9s 2023-09-04 16:51:57 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [2/50] train_loss: 0.0599, val_loss: 0.0362, val_r2: 0.9642, lr: 0.000396, 64.7s 2023-09-04 16:53:06 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [3/50] train_loss: 0.0300, val_loss: 0.0262, val_r2: 0.9741, lr: 0.000388, 68.0s 2023-09-04 16:54:10 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [4/50] train_loss: 0.0227, val_loss: 0.0228, val_r2: 0.9774, lr: 0.000379, 63.1s 2023-09-04 16:55:22 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [5/50] train_loss: 0.0179, val_loss: 0.0199, val_r2: 0.9804, lr: 0.000371, 71.4s 2023-09-04 16:56:29 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [6/50] train_loss: 0.0166, val_loss: 0.0142, val_r2: 0.9859, lr: 0.000363, 66.7s 2023-09-04 16:57:33 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [7/50] train_loss: 0.0142, val_loss: 0.0163, val_r2: 0.9839, lr: 0.000355, 63.5s 2023-09-04 16:58:37 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [8/50] train_loss: 0.0136, val_loss: 0.0163, val_r2: 0.9839, lr: 0.000346, 64.0s 2023-09-04 16:59:43 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [9/50] train_loss: 0.0113, val_loss: 0.0192, val_r2: 0.9810, lr: 0.000338, 66.1s 2023-09-04 17:00:46 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [10/50] train_loss: 0.0119, val_loss: 0.0127, val_r2: 0.9874, lr: 0.000330, 62.6s 2023-09-04 17:01:50 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [11/50] train_loss: 0.0110, val_loss: 0.0165, val_r2: 0.9836, lr: 0.000322, 63.0s 2023-09-04 17:02:54 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [12/50] train_loss: 0.0105, val_loss: 0.0100, val_r2: 0.9901, lr: 0.000313, 64.6s 2023-09-04 17:04:02 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [13/50] train_loss: 0.0091, val_loss: 0.0092, val_r2: 0.9909, lr: 0.000305, 67.8s 2023-09-04 17:05:06 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [14/50] train_loss: 0.0097, val_loss: 0.0091, val_r2: 0.9910, lr: 0.000297, 63.1s 2023-09-04 17:06:11 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [15/50] train_loss: 0.0076, val_loss: 0.0077, val_r2: 0.9923, lr: 0.000289, 63.6s 2023-09-04 17:07:14 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [16/50] train_loss: 0.0072, val_loss: 0.0110, val_r2: 0.9891, lr: 0.000280, 62.7s 2023-09-04 17:08:17 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [17/50] train_loss: 0.0075, val_loss: 0.0071, val_r2: 0.9929, lr: 0.000272, 62.6s 2023-09-04 17:09:21 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [18/50] train_loss: 0.0065, val_loss: 0.0072, val_r2: 0.9929, lr: 0.000264, 63.8s 2023-09-04 17:10:27 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [19/50] train_loss: 0.0063, val_loss: 0.0086, val_r2: 0.9914, lr: 0.000256, 65.5s 2023-09-04 17:11:30 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [20/50] train_loss: 0.0064, val_loss: 0.0078, val_r2: 0.9922, lr: 0.000247, 63.8s 2023-09-04 17:12:33 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [21/50] train_loss: 0.0055, val_loss: 0.0058, val_r2: 0.9943, lr: 0.000239, 63.1s 2023-09-04 17:13:40 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [22/50] train_loss: 0.0052, val_loss: 0.0063, val_r2: 0.9938, lr: 0.000231, 66.2s 2023-09-04 17:14:49 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [23/50] train_loss: 0.0053, val_loss: 0.0090, val_r2: 0.9911, lr: 0.000223, 69.1s 2023-09-04 17:16:03 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [24/50] train_loss: 0.0051, val_loss: 0.0058, val_r2: 0.9943, lr: 0.000214, 73.9s 2023-09-04 17:17:08 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [25/50] train_loss: 0.0047, val_loss: 0.0053, val_r2: 0.9947, lr: 0.000206, 63.8s 2023-09-04 17:18:12 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [26/50] train_loss: 0.0040, val_loss: 0.0056, val_r2: 0.9945, lr: 0.000198, 63.4s 2023-09-04 17:19:18 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [27/50] train_loss: 0.0040, val_loss: 0.0060, val_r2: 0.9941, lr: 0.000190, 65.5s 2023-09-04 17:20:20 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [28/50] train_loss: 0.0039, val_loss: 0.0070, val_r2: 0.9931, lr: 0.000181, 62.9s 2023-09-04 17:21:35 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [29/50] train_loss: 0.0036, val_loss: 0.0080, val_r2: 0.9921, lr: 0.000173, 74.9s 2023-09-04 17:22:39 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [30/50] train_loss: 0.0036, val_loss: 0.0050, val_r2: 0.9950, lr: 0.000165, 64.1s 2023-09-04 17:23:44 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [31/50] train_loss: 0.0036, val_loss: 0.0060, val_r2: 0.9941, lr: 0.000157, 63.5s 2023-09-04 17:24:48 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [32/50] train_loss: 0.0033, val_loss: 0.0050, val_r2: 0.9950, lr: 0.000148, 64.0s 2023-09-04 17:25:51 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [33/50] train_loss: 0.0032, val_loss: 0.0044, val_r2: 0.9956, lr: 0.000140, 63.4s 2023-09-04 17:27:01 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [34/50] train_loss: 0.0028, val_loss: 0.0046, val_r2: 0.9954, lr: 0.000132, 69.0s 2023-09-04 17:28:11 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [35/50] train_loss: 0.0026, val_loss: 0.0043, val_r2: 0.9958, lr: 0.000124, 70.3s 2023-09-04 17:29:19 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [36/50] train_loss: 0.0025, val_loss: 0.0052, val_r2: 0.9949, lr: 0.000115, 67.5s 2023-09-04 17:30:25 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [37/50] train_loss: 0.0025, val_loss: 0.0046, val_r2: 0.9955, lr: 0.000107, 65.6s 2023-09-04 17:31:30 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [38/50] train_loss: 0.0024, val_loss: 0.0046, val_r2: 0.9955, lr: 0.000099, 65.2s 2023-09-04 17:32:34 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [39/50] train_loss: 0.0023, val_loss: 0.0042, val_r2: 0.9958, lr: 0.000091, 63.9s 2023-09-04 17:33:39 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [40/50] train_loss: 0.0022, val_loss: 0.0054, val_r2: 0.9947, lr: 0.000082, 64.3s 2023-09-04 17:34:44 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [41/50] train_loss: 0.0020, val_loss: 0.0043, val_r2: 0.9957, lr: 0.000074, 64.5s 2023-09-04 17:35:48 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [42/50] train_loss: 0.0020, val_loss: 0.0049, val_r2: 0.9951, lr: 0.000066, 64.6s 2023-09-04 17:36:56 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [43/50] train_loss: 0.0018, val_loss: 0.0047, val_r2: 0.9953, lr: 0.000058, 67.7s 2023-09-04 17:38:05 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [44/50] train_loss: 0.0018, val_loss: 0.0041, val_r2: 0.9959, lr: 0.000049, 68.6s 2023-09-04 17:39:14 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [45/50] train_loss: 0.0017, val_loss: 0.0042, val_r2: 0.9959, lr: 0.000041, 68.0s 2023-09-04 17:40:19 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [46/50] train_loss: 0.0017, val_loss: 0.0040, val_r2: 0.9960, lr: 0.000033, 65.3s 2023-09-04 17:41:23 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [47/50] train_loss: 0.0019, val_loss: 0.0043, val_r2: 0.9957, lr: 0.000025, 63.4s 2023-09-04 17:42:32 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [48/50] train_loss: 0.0019, val_loss: 0.0042, val_r2: 0.9959, lr: 0.000016, 68.8s 2023-09-04 17:43:37 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [49/50] train_loss: 0.0015, val_loss: 0.0040, val_r2: 0.9960, lr: 0.000008, 64.9s 2023-09-04 17:44:43 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [50/50] train_loss: 0.0015, val_loss: 0.0042, val_r2: 0.9959, lr: 0.000000, 66.0s 2023-09-04 17:44:45 | unimol/tasks/trainer.py | 213 | INFO | Uni-Mol(QSAR) | load model success! 2023-09-04 17:44:50 | unimol/models/nnmodel.py | 129 | INFO | Uni-Mol(QSAR) | fold 1, result {'r2': 0.9960434374756032, 'mae': 0.059422977, 'pearsonr': 0.9980879792930252, 'spearmanr': 0.997501112441128, 'mse': 0.0068540904} 2023-09-04 17:44:50 | unimol/models/unimol.py | 114 | INFO | Uni-Mol(QSAR) | Loading pretrained weights from /opt/conda/lib/python3.8/site-packages/unimol-0.0.2-py3.8.egg/unimol/weights/mol_pre_all_h_220816.pt 2023-09-04 17:45:54 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [1/50] train_loss: 0.1815, val_loss: 0.0471, val_r2: 0.9540, lr: 0.000267, 64.0s 2023-09-04 17:47:01 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [2/50] train_loss: 0.0518, val_loss: 0.0225, val_r2: 0.9778, lr: 0.000396, 65.7s 2023-09-04 17:48:20 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [3/50] train_loss: 0.0276, val_loss: 0.0249, val_r2: 0.9756, lr: 0.000388, 77.8s 2023-09-04 17:49:31 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [4/50] train_loss: 0.0196, val_loss: 0.0150, val_r2: 0.9852, lr: 0.000379, 71.6s 2023-09-04 17:50:45 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [5/50] train_loss: 0.0169, val_loss: 0.0158, val_r2: 0.9843, lr: 0.000371, 73.1s 2023-09-04 17:51:53 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [6/50] train_loss: 0.0153, val_loss: 0.0114, val_r2: 0.9888, lr: 0.000363, 68.1s 2023-09-04 17:52:59 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [7/50] train_loss: 0.0131, val_loss: 0.0123, val_r2: 0.9880, lr: 0.000355, 65.7s 2023-09-04 17:54:04 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [8/50] train_loss: 0.0123, val_loss: 0.0099, val_r2: 0.9902, lr: 0.000346, 64.8s 2023-09-04 17:55:10 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [9/50] train_loss: 0.0105, val_loss: 0.0110, val_r2: 0.9891, lr: 0.000338, 64.9s 2023-09-04 17:56:12 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [10/50] train_loss: 0.0101, val_loss: 0.0123, val_r2: 0.9878, lr: 0.000330, 62.7s 2023-09-04 17:57:16 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [11/50] train_loss: 0.0094, val_loss: 0.0116, val_r2: 0.9885, lr: 0.000322, 63.1s 2023-09-04 17:58:18 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [12/50] train_loss: 0.0089, val_loss: 0.0103, val_r2: 0.9899, lr: 0.000313, 62.9s 2023-09-04 17:59:22 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [13/50] train_loss: 0.0080, val_loss: 0.0082, val_r2: 0.9919, lr: 0.000305, 63.6s 2023-09-04 18:00:28 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [14/50] train_loss: 0.0081, val_loss: 0.0089, val_r2: 0.9912, lr: 0.000297, 65.5s 2023-09-04 18:01:31 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [15/50] train_loss: 0.0072, val_loss: 0.0107, val_r2: 0.9894, lr: 0.000289, 63.3s 2023-09-04 18:02:34 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [16/50] train_loss: 0.0068, val_loss: 0.0074, val_r2: 0.9927, lr: 0.000280, 62.6s 2023-09-04 18:03:38 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [17/50] train_loss: 0.0060, val_loss: 0.0069, val_r2: 0.9932, lr: 0.000272, 63.2s 2023-09-04 18:04:45 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [18/50] train_loss: 0.0055, val_loss: 0.0074, val_r2: 0.9927, lr: 0.000264, 66.7s 2023-09-04 18:05:56 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [19/50] train_loss: 0.0054, val_loss: 0.0067, val_r2: 0.9933, lr: 0.000256, 70.5s 2023-09-04 18:06:59 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [20/50] train_loss: 0.0053, val_loss: 0.0072, val_r2: 0.9929, lr: 0.000247, 62.5s 2023-09-04 18:08:01 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [21/50] train_loss: 0.0049, val_loss: 0.0074, val_r2: 0.9927, lr: 0.000239, 62.2s 2023-09-04 18:09:03 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [22/50] train_loss: 0.0044, val_loss: 0.0063, val_r2: 0.9938, lr: 0.000231, 62.6s 2023-09-04 18:10:10 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [23/50] train_loss: 0.0045, val_loss: 0.0072, val_r2: 0.9929, lr: 0.000223, 66.2s 2023-09-04 18:11:14 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [24/50] train_loss: 0.0041, val_loss: 0.0057, val_r2: 0.9943, lr: 0.000214, 64.2s 2023-09-04 18:12:19 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [25/50] train_loss: 0.0043, val_loss: 0.0069, val_r2: 0.9932, lr: 0.000206, 63.9s 2023-09-04 18:13:22 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [26/50] train_loss: 0.0038, val_loss: 0.0057, val_r2: 0.9944, lr: 0.000198, 63.1s 2023-09-04 18:14:27 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [27/50] train_loss: 0.0034, val_loss: 0.0054, val_r2: 0.9946, lr: 0.000190, 64.9s 2023-09-04 18:15:46 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [28/50] train_loss: 0.0034, val_loss: 0.0060, val_r2: 0.9941, lr: 0.000181, 78.0s 2023-09-04 18:17:04 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [29/50] train_loss: 0.0032, val_loss: 0.0054, val_r2: 0.9947, lr: 0.000173, 77.9s 2023-09-04 18:18:17 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [30/50] train_loss: 0.0029, val_loss: 0.0053, val_r2: 0.9947, lr: 0.000165, 72.7s 2023-09-04 18:19:21 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [31/50] train_loss: 0.0030, val_loss: 0.0053, val_r2: 0.9948, lr: 0.000157, 63.4s 2023-09-04 18:20:27 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [32/50] train_loss: 0.0026, val_loss: 0.0050, val_r2: 0.9951, lr: 0.000148, 64.5s 2023-09-04 18:21:32 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [33/50] train_loss: 0.0024, val_loss: 0.0053, val_r2: 0.9948, lr: 0.000140, 64.2s 2023-09-04 18:22:35 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [34/50] train_loss: 0.0025, val_loss: 0.0047, val_r2: 0.9954, lr: 0.000132, 63.0s 2023-09-04 18:23:42 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [35/50] train_loss: 0.0023, val_loss: 0.0047, val_r2: 0.9954, lr: 0.000124, 67.0s 2023-09-04 18:24:47 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [36/50] train_loss: 0.0022, val_loss: 0.0046, val_r2: 0.9954, lr: 0.000115, 64.3s 2023-09-04 18:25:58 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [37/50] train_loss: 0.0020, val_loss: 0.0045, val_r2: 0.9956, lr: 0.000107, 70.8s 2023-09-04 18:27:01 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [38/50] train_loss: 0.0020, val_loss: 0.0046, val_r2: 0.9955, lr: 0.000099, 62.5s 2023-09-04 18:28:05 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [39/50] train_loss: 0.0018, val_loss: 0.0046, val_r2: 0.9955, lr: 0.000091, 63.7s 2023-09-04 18:29:10 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [40/50] train_loss: 0.0018, val_loss: 0.0047, val_r2: 0.9953, lr: 0.000082, 64.7s 2023-09-04 18:30:12 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [41/50] train_loss: 0.0018, val_loss: 0.0043, val_r2: 0.9958, lr: 0.000074, 62.3s 2023-09-04 18:31:15 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [42/50] train_loss: 0.0017, val_loss: 0.0045, val_r2: 0.9956, lr: 0.000066, 62.5s 2023-09-04 18:32:19 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [43/50] train_loss: 0.0016, val_loss: 0.0043, val_r2: 0.9957, lr: 0.000058, 64.3s 2023-09-04 18:33:24 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [44/50] train_loss: 0.0016, val_loss: 0.0043, val_r2: 0.9958, lr: 0.000049, 65.1s 2023-09-04 18:34:29 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [45/50] train_loss: 0.0017, val_loss: 0.0043, val_r2: 0.9957, lr: 0.000041, 64.3s 2023-09-04 18:35:36 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [46/50] train_loss: 0.0014, val_loss: 0.0042, val_r2: 0.9958, lr: 0.000033, 67.2s 2023-09-04 18:36:47 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [47/50] train_loss: 0.0013, val_loss: 0.0044, val_r2: 0.9957, lr: 0.000025, 69.9s 2023-09-04 18:38:05 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [48/50] train_loss: 0.0013, val_loss: 0.0042, val_r2: 0.9958, lr: 0.000016, 78.2s 2023-09-04 18:39:19 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [49/50] train_loss: 0.0014, val_loss: 0.0042, val_r2: 0.9959, lr: 0.000008, 73.7s 2023-09-04 18:40:22 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [50/50] train_loss: 0.0013, val_loss: 0.0042, val_r2: 0.9959, lr: 0.000000, 62.9s 2023-09-04 18:40:23 | unimol/tasks/trainer.py | 213 | INFO | Uni-Mol(QSAR) | load model success! 2023-09-04 18:40:28 | unimol/models/nnmodel.py | 129 | INFO | Uni-Mol(QSAR) | fold 2, result {'r2': 0.9959009040119442, 'mae': 0.058838677, 'pearsonr': 0.9979535268752111, 'spearmanr': 0.9973975017714561, 'mse': 0.007119618} 2023-09-04 18:40:29 | unimol/models/unimol.py | 114 | INFO | Uni-Mol(QSAR) | Loading pretrained weights from /opt/conda/lib/python3.8/site-packages/unimol-0.0.2-py3.8.egg/unimol/weights/mol_pre_all_h_220816.pt 2023-09-04 18:41:33 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [1/50] train_loss: 0.1751, val_loss: 0.0821, val_r2: 0.9176, lr: 0.000267, 64.2s 2023-09-04 18:42:36 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [2/50] train_loss: 0.0520, val_loss: 0.0254, val_r2: 0.9746, lr: 0.000396, 62.4s 2023-09-04 18:43:42 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [3/50] train_loss: 0.0273, val_loss: 0.0234, val_r2: 0.9765, lr: 0.000388, 64.9s 2023-09-04 18:44:53 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [4/50] train_loss: 0.0211, val_loss: 0.0153, val_r2: 0.9847, lr: 0.000379, 71.2s 2023-09-04 18:46:04 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [5/50] train_loss: 0.0181, val_loss: 0.0128, val_r2: 0.9873, lr: 0.000371, 70.1s 2023-09-04 18:47:11 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [6/50] train_loss: 0.0152, val_loss: 0.0138, val_r2: 0.9861, lr: 0.000363, 66.3s 2023-09-04 18:48:15 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [7/50] train_loss: 0.0132, val_loss: 0.0132, val_r2: 0.9868, lr: 0.000355, 64.3s 2023-09-04 18:49:19 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [8/50] train_loss: 0.0130, val_loss: 0.0111, val_r2: 0.9889, lr: 0.000346, 64.0s 2023-09-04 18:50:27 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [9/50] train_loss: 0.0123, val_loss: 0.0120, val_r2: 0.9881, lr: 0.000338, 66.6s 2023-09-04 18:51:32 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [10/50] train_loss: 0.0108, val_loss: 0.0095, val_r2: 0.9904, lr: 0.000330, 65.3s 2023-09-04 18:52:35 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [11/50] train_loss: 0.0097, val_loss: 0.0084, val_r2: 0.9916, lr: 0.000322, 62.6s 2023-09-04 18:53:38 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [12/50] train_loss: 0.0087, val_loss: 0.0084, val_r2: 0.9916, lr: 0.000313, 62.6s 2023-09-04 18:54:42 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [13/50] train_loss: 0.0086, val_loss: 0.0099, val_r2: 0.9901, lr: 0.000305, 62.7s 2023-09-04 18:55:47 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [14/50] train_loss: 0.0076, val_loss: 0.0084, val_r2: 0.9916, lr: 0.000297, 65.1s 2023-09-04 18:56:52 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [15/50] train_loss: 0.0076, val_loss: 0.0079, val_r2: 0.9921, lr: 0.000289, 64.3s 2023-09-04 18:58:07 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [16/50] train_loss: 0.0068, val_loss: 0.0074, val_r2: 0.9926, lr: 0.000280, 74.5s 2023-09-04 18:59:26 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [17/50] train_loss: 0.0062, val_loss: 0.0077, val_r2: 0.9923, lr: 0.000272, 78.4s 2023-09-04 19:00:44 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [18/50] train_loss: 0.0060, val_loss: 0.0068, val_r2: 0.9931, lr: 0.000264, 78.2s 2023-09-04 19:02:03 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [19/50] train_loss: 0.0060, val_loss: 0.0065, val_r2: 0.9935, lr: 0.000256, 78.1s 2023-09-04 19:03:12 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [20/50] train_loss: 0.0056, val_loss: 0.0081, val_r2: 0.9919, lr: 0.000247, 67.9s 2023-09-04 19:04:17 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [21/50] train_loss: 0.0047, val_loss: 0.0073, val_r2: 0.9926, lr: 0.000239, 65.1s 2023-09-04 19:05:20 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [22/50] train_loss: 0.0053, val_loss: 0.0075, val_r2: 0.9924, lr: 0.000231, 63.3s 2023-09-04 19:06:23 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [23/50] train_loss: 0.0046, val_loss: 0.0060, val_r2: 0.9940, lr: 0.000223, 63.3s 2023-09-04 19:07:29 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [24/50] train_loss: 0.0040, val_loss: 0.0057, val_r2: 0.9943, lr: 0.000214, 65.0s 2023-09-04 19:08:36 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [25/50] train_loss: 0.0038, val_loss: 0.0068, val_r2: 0.9931, lr: 0.000206, 65.9s 2023-09-04 19:09:42 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [26/50] train_loss: 0.0039, val_loss: 0.0056, val_r2: 0.9944, lr: 0.000198, 66.0s 2023-09-04 19:10:49 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [27/50] train_loss: 0.0034, val_loss: 0.0055, val_r2: 0.9944, lr: 0.000190, 65.6s 2023-09-04 19:11:56 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [28/50] train_loss: 0.0035, val_loss: 0.0064, val_r2: 0.9936, lr: 0.000181, 66.5s 2023-09-04 19:12:58 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [29/50] train_loss: 0.0033, val_loss: 0.0067, val_r2: 0.9933, lr: 0.000173, 62.4s 2023-09-04 19:14:03 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [30/50] train_loss: 0.0031, val_loss: 0.0053, val_r2: 0.9947, lr: 0.000165, 64.5s 2023-09-04 19:15:07 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [31/50] train_loss: 0.0029, val_loss: 0.0048, val_r2: 0.9952, lr: 0.000157, 63.0s 2023-09-04 19:16:11 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [32/50] train_loss: 0.0027, val_loss: 0.0050, val_r2: 0.9950, lr: 0.000148, 63.7s 2023-09-04 19:17:29 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [33/50] train_loss: 0.0025, val_loss: 0.0050, val_r2: 0.9950, lr: 0.000140, 77.8s 2023-09-04 19:18:42 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [34/50] train_loss: 0.0026, val_loss: 0.0055, val_r2: 0.9945, lr: 0.000132, 72.9s 2023-09-04 19:19:55 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [35/50] train_loss: 0.0024, val_loss: 0.0048, val_r2: 0.9952, lr: 0.000124, 73.3s 2023-09-04 19:21:05 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [36/50] train_loss: 0.0023, val_loss: 0.0054, val_r2: 0.9946, lr: 0.000115, 70.1s 2023-09-04 19:22:11 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [37/50] train_loss: 0.0022, val_loss: 0.0046, val_r2: 0.9953, lr: 0.000107, 65.7s 2023-09-04 19:23:16 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [38/50] train_loss: 0.0021, val_loss: 0.0051, val_r2: 0.9949, lr: 0.000099, 65.0s 2023-09-04 19:24:25 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [39/50] train_loss: 0.0020, val_loss: 0.0047, val_r2: 0.9952, lr: 0.000091, 68.9s 2023-09-04 19:25:33 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [40/50] train_loss: 0.0021, val_loss: 0.0046, val_r2: 0.9954, lr: 0.000082, 67.2s 2023-09-04 19:26:39 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [41/50] train_loss: 0.0018, val_loss: 0.0050, val_r2: 0.9950, lr: 0.000074, 65.2s 2023-09-04 19:27:44 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [42/50] train_loss: 0.0017, val_loss: 0.0046, val_r2: 0.9953, lr: 0.000066, 65.2s 2023-09-04 19:28:50 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [43/50] train_loss: 0.0016, val_loss: 0.0043, val_r2: 0.9957, lr: 0.000058, 66.1s 2023-09-04 19:29:54 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [44/50] train_loss: 0.0016, val_loss: 0.0043, val_r2: 0.9957, lr: 0.000049, 63.2s 2023-09-04 19:31:00 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [45/50] train_loss: 0.0015, val_loss: 0.0044, val_r2: 0.9956, lr: 0.000041, 66.3s 2023-09-04 19:32:06 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [46/50] train_loss: 0.0016, val_loss: 0.0047, val_r2: 0.9953, lr: 0.000033, 65.5s 2023-09-04 19:33:12 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [47/50] train_loss: 0.0014, val_loss: 0.0047, val_r2: 0.9953, lr: 0.000025, 66.2s 2023-09-04 19:34:19 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [48/50] train_loss: 0.0013, val_loss: 0.0045, val_r2: 0.9954, lr: 0.000016, 66.8s 2023-09-04 19:35:24 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [49/50] train_loss: 0.0013, val_loss: 0.0042, val_r2: 0.9958, lr: 0.000008, 65.2s 2023-09-04 19:36:28 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [50/50] train_loss: 0.0013, val_loss: 0.0043, val_r2: 0.9957, lr: 0.000000, 64.0s 2023-09-04 19:36:30 | unimol/tasks/trainer.py | 213 | INFO | Uni-Mol(QSAR) | load model success! 2023-09-04 19:36:35 | unimol/models/nnmodel.py | 129 | INFO | Uni-Mol(QSAR) | fold 3, result {'r2': 0.9957527174453936, 'mae': 0.059466276, 'pearsonr': 0.9979272804072913, 'spearmanr': 0.9974385157147599, 'mse': 0.007279518} 2023-09-04 19:36:35 | unimol/models/unimol.py | 114 | INFO | Uni-Mol(QSAR) | Loading pretrained weights from /opt/conda/lib/python3.8/site-packages/unimol-0.0.2-py3.8.egg/unimol/weights/mol_pre_all_h_220816.pt 2023-09-04 19:37:41 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [1/50] train_loss: 0.1902, val_loss: 0.1165, val_r2: 0.8797, lr: 0.000267, 65.1s 2023-09-04 19:38:48 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [2/50] train_loss: 0.0543, val_loss: 0.0351, val_r2: 0.9634, lr: 0.000396, 66.5s 2023-09-04 19:39:52 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [3/50] train_loss: 0.0259, val_loss: 0.0187, val_r2: 0.9806, lr: 0.000388, 63.4s 2023-09-04 19:40:57 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [4/50] train_loss: 0.0194, val_loss: 0.0160, val_r2: 0.9834, lr: 0.000379, 63.8s 2023-09-04 19:42:02 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [5/50] train_loss: 0.0176, val_loss: 0.0225, val_r2: 0.9766, lr: 0.000371, 64.2s 2023-09-04 19:43:07 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [6/50] train_loss: 0.0151, val_loss: 0.0120, val_r2: 0.9876, lr: 0.000363, 65.4s 2023-09-04 19:44:19 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [7/50] train_loss: 0.0133, val_loss: 0.0108, val_r2: 0.9888, lr: 0.000355, 70.9s 2023-09-04 19:45:24 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [8/50] train_loss: 0.0129, val_loss: 0.0108, val_r2: 0.9888, lr: 0.000346, 65.0s 2023-09-04 19:46:31 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [9/50] train_loss: 0.0118, val_loss: 0.0100, val_r2: 0.9896, lr: 0.000338, 66.4s 2023-09-04 19:47:39 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [10/50] train_loss: 0.0100, val_loss: 0.0093, val_r2: 0.9904, lr: 0.000330, 67.6s 2023-09-04 19:48:43 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [11/50] train_loss: 0.0102, val_loss: 0.0106, val_r2: 0.9890, lr: 0.000322, 62.4s 2023-09-04 19:49:46 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [12/50] train_loss: 0.0094, val_loss: 0.0090, val_r2: 0.9907, lr: 0.000313, 62.7s 2023-09-04 19:50:53 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [13/50] train_loss: 0.0081, val_loss: 0.0093, val_r2: 0.9904, lr: 0.000305, 66.8s 2023-09-04 19:51:57 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [14/50] train_loss: 0.0079, val_loss: 0.0080, val_r2: 0.9917, lr: 0.000297, 64.3s 2023-09-04 19:53:04 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [15/50] train_loss: 0.0076, val_loss: 0.0078, val_r2: 0.9919, lr: 0.000289, 65.7s 2023-09-04 19:54:10 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [16/50] train_loss: 0.0068, val_loss: 0.0080, val_r2: 0.9918, lr: 0.000280, 65.2s 2023-09-04 19:55:15 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [17/50] train_loss: 0.0063, val_loss: 0.0078, val_r2: 0.9919, lr: 0.000272, 65.4s 2023-09-04 19:56:19 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [18/50] train_loss: 0.0067, val_loss: 0.0099, val_r2: 0.9898, lr: 0.000264, 62.9s 2023-09-04 19:57:21 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [19/50] train_loss: 0.0055, val_loss: 0.0080, val_r2: 0.9917, lr: 0.000256, 62.7s 2023-09-04 19:58:25 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [20/50] train_loss: 0.0055, val_loss: 0.0064, val_r2: 0.9934, lr: 0.000247, 64.2s 2023-09-04 20:02:46 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [24/50] train_loss: 0.0042, val_loss: 0.0056, val_r2: 0.9941, lr: 0.000214, 65.8s 2023-09-04 20:03:52 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [25/50] train_loss: 0.0040, val_loss: 0.0062, val_r2: 0.9936, lr: 0.000206, 65.2s val: 14%|█▍ | 22/159 [00:00<00:04, 30.91it/s, Epoch=Epoch 26/50, loss=0.0053] IOPub message rate exceeded. The Jupyter server will temporarily stop sending output to the client in order to avoid crashing it. To change this limit, set the config variable `--ServerApp.iopub_msg_rate_limit`. Current values: ServerApp.iopub_msg_rate_limit=1000.0 (msgs/sec) ServerApp.rate_limit_window=3.0 (secs) 2023-09-04 20:07:06 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [28/50] train_loss: 0.0035, val_loss: 0.0053, val_r2: 0.9945, lr: 0.000181, 63.6s 2023-09-04 20:08:09 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [29/50] train_loss: 0.0034, val_loss: 0.0057, val_r2: 0.9941, lr: 0.000173, 62.9s 2023-09-04 20:09:18 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [30/50] train_loss: 0.0031, val_loss: 0.0051, val_r2: 0.9947, lr: 0.000165, 68.4s 2023-09-04 20:10:31 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [31/50] train_loss: 0.0030, val_loss: 0.0049, val_r2: 0.9950, lr: 0.000157, 72.6s 2023-09-04 20:11:42 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [32/50] train_loss: 0.0027, val_loss: 0.0057, val_r2: 0.9941, lr: 0.000148, 70.5s 2023-09-04 20:12:50 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [33/50] train_loss: 0.0032, val_loss: 0.0055, val_r2: 0.9943, lr: 0.000140, 67.8s 2023-09-04 20:13:53 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [34/50] train_loss: 0.0024, val_loss: 0.0048, val_r2: 0.9950, lr: 0.000132, 63.0s 2023-09-04 20:14:58 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [35/50] train_loss: 0.0024, val_loss: 0.0045, val_r2: 0.9953, lr: 0.000124, 64.7s 2023-09-04 20:16:03 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [36/50] train_loss: 0.0023, val_loss: 0.0054, val_r2: 0.9944, lr: 0.000115, 64.3s 2023-09-04 20:17:09 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [37/50] train_loss: 0.0021, val_loss: 0.0045, val_r2: 0.9953, lr: 0.000107, 65.6s 2023-09-04 20:18:15 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [38/50] train_loss: 0.0021, val_loss: 0.0047, val_r2: 0.9951, lr: 0.000099, 66.3s 2023-09-04 20:19:19 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [39/50] train_loss: 0.0021, val_loss: 0.0046, val_r2: 0.9952, lr: 0.000091, 63.6s 2023-09-04 20:20:23 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [40/50] train_loss: 0.0019, val_loss: 0.0051, val_r2: 0.9947, lr: 0.000082, 64.6s 2023-09-04 20:21:36 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [41/50] train_loss: 0.0018, val_loss: 0.0044, val_r2: 0.9955, lr: 0.000074, 72.3s 2023-09-04 20:22:41 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [42/50] train_loss: 0.0017, val_loss: 0.0042, val_r2: 0.9956, lr: 0.000066, 64.7s 2023-09-04 20:23:45 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [43/50] train_loss: 0.0016, val_loss: 0.0045, val_r2: 0.9953, lr: 0.000058, 63.4s 2023-09-04 20:24:49 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [44/50] train_loss: 0.0016, val_loss: 0.0043, val_r2: 0.9955, lr: 0.000049, 64.0s 2023-09-04 20:25:55 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [45/50] train_loss: 0.0016, val_loss: 0.0041, val_r2: 0.9957, lr: 0.000041, 65.8s 2023-09-04 20:27:01 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [46/50] train_loss: 0.0015, val_loss: 0.0042, val_r2: 0.9957, lr: 0.000033, 65.3s 2023-09-04 20:28:04 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [47/50] train_loss: 0.0014, val_loss: 0.0046, val_r2: 0.9953, lr: 0.000025, 63.3s 2023-09-04 20:29:07 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [48/50] train_loss: 0.0014, val_loss: 0.0042, val_r2: 0.9957, lr: 0.000016, 62.8s 2023-09-04 20:30:10 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [49/50] train_loss: 0.0013, val_loss: 0.0042, val_r2: 0.9956, lr: 0.000008, 63.1s 2023-09-04 20:31:21 | unimol/tasks/trainer.py | 169 | INFO | Uni-Mol(QSAR) | Epoch [50/50] train_loss: 0.0013, val_loss: 0.0041, val_r2: 0.9957, lr: 0.000000, 71.6s 2023-09-04 20:31:24 | unimol/tasks/trainer.py | 213 | INFO | Uni-Mol(QSAR) | load model success! 2023-09-04 20:31:29 | unimol/models/nnmodel.py | 129 | INFO | Uni-Mol(QSAR) | fold 4, result {'r2': 0.995722167871576, 'mae': 0.058697157, 'pearsonr': 0.997918921152862, 'spearmanr': 0.9975153439068033, 'mse': 0.007057018} 2023-09-04 20:31:29 | unimol/models/nnmodel.py | 144 | INFO | Uni-Mol(QSAR) | Uni-Mol metrics score: {'r2': 0.9958098504114381, 'mae': 0.05926784082913989, 'pearsonr': 0.9979403073106544, 'spearmanr': 0.997427024789587, 'mse': 0.0071642844934711545} 2023-09-04 20:31:29 | unimol/models/nnmodel.py | 145 | INFO | Uni-Mol(QSAR) | Uni-Mol & Metric result saved!
Step 3: Hyperparameter Tuning (Optional)
Follow the BBBP tutorial for hyperparameter tuning (link: https://nb.bohrium.dp.tech/detail/1511053944)
The optimal hyperparameters are: Lr=0.0004, Batch size=32.
Step 4: Load the Test Set for Solubility Prediction
The test set has the same data format as the training set. The best training weights have already been saved in /bohr/aorfb-7iz1/v2/best_exp
, and you can directly run the following code.
2023-09-07 13:43:56 | unimol/data/conformer.py | 62 | INFO | Uni-Mol(QSAR) | Start generating conformers... 6324it [00:36, 174.39it/s] 2023-09-07 13:44:32 | unimol/data/conformer.py | 66 | INFO | Uni-Mol(QSAR) | Failed to generate conformers for 0.00% of molecules. 2023-09-07 13:44:32 | unimol/data/conformer.py | 68 | INFO | Uni-Mol(QSAR) | Failed to generate 3d conformers for 0.03% of molecules. 2023-09-07 13:44:33 | unimol/models/unimol.py | 114 | INFO | Uni-Mol(QSAR) | Loading pretrained weights from /opt/conda/lib/python3.8/site-packages/unimol-0.0.2-py3.8.egg/unimol/weights/mol_pre_all_h_220816.pt 2023-09-07 13:44:34 | unimol/models/nnmodel.py | 154 | INFO | Uni-Mol(QSAR) | start predict NNModel:unimolv1 2023-09-07 13:44:37 | unimol/tasks/trainer.py | 213 | INFO | Uni-Mol(QSAR) | load model success! 2023-09-07 13:44:54 | unimol/tasks/trainer.py | 213 | INFO | Uni-Mol(QSAR) | load model success! 2023-09-07 13:45:08 | unimol/tasks/trainer.py | 213 | INFO | Uni-Mol(QSAR) | load model success! 2023-09-07 13:45:23 | unimol/tasks/trainer.py | 213 | INFO | Uni-Mol(QSAR) | load model success! 2023-09-07 13:45:37 | unimol/tasks/trainer.py | 213 | INFO | Uni-Mol(QSAR) | load model success! 2023-09-07 13:45:51 | unimol/predict.py | 66 | INFO | Uni-Mol(QSAR) | final predict metrics score: {'r2': 0.996431347888573, 'mae': 0.05341669959421024, 'pearsonr': 0.9982373718024908, 'spearmanr': 0.99800209666078, 'mse': 0.006212046942459196}
Step 5: Save Training and Test Data as CSV Files (Optional)
You can directly use /bohr/aorfb-7iz1/v2/RedDB_test_with_predictions.csv
and /bohr/aorfb-7iz1/v2/RedDB_train_with_predictions.csv
.
Step 6: Visualization
Visualize the results of our model training by plotting the experimental values against the predicted values, comparing the experimental and predicted values from the test set.
Step 7. Visualization of Atomic Vector Representations Based on Uni-Mol
Principle: The goal of the following code is to use the high-dimensional vectors representing atomic information in UniMolRepr. By calculating the L2 norm of these vectors, a single numerical value can be obtained, which to some extent integrates all the attribute information of the atom. The L2 norm is a function that maps vectors from a vector space to non-negative real numbers and is used to measure the length or size of a vector. The formula is as follows:
Next, we further utilize rdMolDraw2D
from rdkit to map each atom's weight to a color.
Run the following commands in order in the command line:
sudo apt-get update
sudo apt-get install libxrender-dev
apt install libxext6
Hit:1 http://archive.ubuntu.com/ubuntu focal InRelease Hit:2 http://security.ubuntu.com/ubuntu focal-security InRelease Hit:3 http://archive.ubuntu.com/ubuntu focal-updates InRelease Hit:4 http://archive.ubuntu.com/ubuntu focal-backports InRelease Hit:5 https://deb.nodesource.com/node_18.x focal InRelease Reading package lists... Done Reading package lists... Done Building dependency tree Reading state information... Done libxrender-dev is already the newest version (1:0.9.10-1). 0 upgraded, 0 newly installed, 0 to remove and 172 not upgraded. Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: libxext6 0 upgraded, 1 newly installed, 0 to remove and 172 not upgraded. Need to get 29.1 kB of archives. After this operation, 113 kB of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu focal/main amd64 libxext6 amd64 2:1.3.4-0ubuntu1 [29.1 kB] Fetched 29.1 kB in 6s (4681 B/s) m debconf: unable to initialize frontend: Dialog debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76, <> line 1.) debconf: falling back to frontend: Readline 78Selecting previously unselected package libxext6:amd64. (Reading database ... 37487 files and directories currently installed.) Preparing to unpack .../libxext6_2%3a1.3.4-0ubuntu1_amd64.deb ... 7Progress: [ 0%] [..........................................................] 87Progress: [ 20%] [###########...............................................] 8Unpacking libxext6:amd64 (2:1.3.4-0ubuntu1) ... 7Progress: [ 40%] [#######################...................................] 8Setting up libxext6:amd64 (2:1.3.4-0ubuntu1) ... 7Progress: [ 60%] [##################################........................] 87Progress: [ 80%] [##############################################............] 8Processing triggers for libc-bin (2.31-0ubuntu9.7) ... /sbin/ldconfig.real: File /lib/x86_64-linux-gnu/libcuda.so.525.89.02 is empty, not checked. /sbin/ldconfig.real: File /lib/x86_64-linux-gnu/libnvidia-nvvm.so.525.89.02 is empty, not checked. /sbin/ldconfig.real: File /lib/x86_64-linux-gnu/libnvcuvid.so.525.89.02 is empty, not checked. /sbin/ldconfig.real: File /lib/x86_64-linux-gnu/libnvidia-cfg.so.525.89.02 is empty, not checked. /sbin/ldconfig.real: File /lib/x86_64-linux-gnu/libnvidia-opencl.so.525.89.02 is empty, not checked. /sbin/ldconfig.real: File /lib/x86_64-linux-gnu/libnvidia-allocator.so.525.89.02 is empty, not checked. /sbin/ldconfig.real: File /lib/x86_64-linux-gnu/libnvidia-ml.so.525.89.02 is empty, not checked. /sbin/ldconfig.real: File /lib/x86_64-linux-gnu/libnvidia-encode.so.525.89.02 is empty, not checked. /sbin/ldconfig.real: File /lib/x86_64-linux-gnu/libnvidia-opticalflow.so.525.89.02 is empty, not checked. /sbin/ldconfig.real: File /lib/x86_64-linux-gnu/libcudadebugger.so.1 is empty, not checked. /sbin/ldconfig.real: File /lib/x86_64-linux-gnu/libnvidia-nvvm.so.4 is empty, not checked. /sbin/ldconfig.real: File /lib/x86_64-linux-gnu/libcudadebugger.so.525.89.02 is empty, not checked. /sbin/ldconfig.real: File /lib/x86_64-linux-gnu/libnvidia-ptxjitcompiler.so.525.89.02 is empty, not checked. /sbin/ldconfig.real: File /lib/x86_64-linux-gnu/libvdpau_nvidia.so.525.89.02 is empty, not checked. /sbin/ldconfig.real: File /lib/x86_64-linux-gnu/libnvidia-compiler.so.525.89.02 is empty, not checked. 78
Step 8: Results and Discussion
From the analysis of the above results, it can be seen that Uni-Mol performs well, with an R2 above 0.996. This indicates that Uni-Mol can accurately predict the solubility of organic redox-active molecules from SMILES text data. Further analysis, combined with visualized molecular diagrams, was conducted to examine the impact of functional group types, bonding positions, and quantities on atomic weights. It was found that Uni-Mol assigns relatively lower weight values to hydrophilic functional groups such as —OH, —NH2, —COOH, and —SO3H. Interestingly, even the same type of functional group can have different weight values depending on its bonding position.
reference
[1]Fei Ai, Zengyue Wang, Nien-Chu Lai,, et al. Heteropoly acid negolytes for high-power-density aqueous redox flow batteries at low temperatures, 2022, Nature Energy
[2]Hu B, DeBruler C, Rhodes Z, et al. Long-Cycling Aqueous Organic Redox Flow Battery (AORFB) toward Sustainable and Safe Energy Storage. 2017, Journal of the American Chemical Society.
[3]Sorkun, E., Zhang, Q., Khetan, A. et al. RedDB, a computational database of electroactive molecules for aqueous redox flow batteries. Sci Data 9, 718 (2022).
[4]Sorkun, M. C., Koelman, J. V. A. & Er, S. Pushing the limits of solubility prediction via quality-oriented data selection. iScience 24, 101961 (2021).
[5]Sorkun, M. C., Khetan, A. & Er, S. Aqsoldb, a curated reference set of aqueous solubility and 2d descriptors for a diverse set of compounds. Scientific data 6, 1–8 (2019).
[6]Huuskonen, J. Estimation of aqueous solubility for a diverse set of organic compounds based on molecular topology. Journal of Chemical Information and Computer Sciences 40, 773–777 (2000).