Rhythmicity Perturbation using GeneRhythm

This tutorial provides a step-by-step guide on performing inference, analysis, and perturbation of gene expression rhythmicity in a single dataset using GeneRhythm. We demonstrate the diverse capabilities of GeneRhythm by applying it to scRNA-seq data obtained from human PDAC samples.

GeneRhythm leverages user-provided gene expression data by integrating wavelet transformation with deep generative modeling. This approach enables the extraction of frequency-domain features that complement traditional time-domain analyses, allowing for a more comprehensive understanding of gene expression dynamics.

[1]:
import subprocess
from Build_graph import *
from Frequency_extract import *
from GCN_VAE import *
from Perturbation import *
from Show_result import *

Part 1: Data loading, time and frequency information acquisition

Obtain time information with monocle3

GeneRhythm firstly utilized monocle3 to obtain the trajectory information of single-cell RNA-seq data. trajectory_inference.R is the script to run monocle3. dataset indicated the name of dataset. mtx, barcode and gene indicate the position of the single-cell RNA-seq data.Based on the trajectory information, GeneRhythm can derive time information (Gene expression chagnes on the trajectory pesodu-time path).

[2]:
dataset = 'PDAC'
mtx = './dataset/PDAC/matrix.mtx'
barcode = './dataset/PDAC/barcodes.csv'
gene  = './dataset/PDAC/features.csv'
subprocess.run(["Rscript", "trajectory_inference.R", dataset, mtx, barcode, gene])
[3]:
dataset = 'PDAC_Disease'
mtx = './dataset/PDAC_Disease/matrix.mtx'
barcode = './dataset/PDAC_Disease/barcodes.csv'
gene  = './dataset/PDAC_Disease/features.csv'
subprocess.run(["Rscript", "trajectory_inference.R", dataset, mtx, barcode, gene])
[4]:
dataset = 'PDAC_Control'
mtx = './dataset/PDAC_Control/matrix.mtx'
barcode = './dataset/PDAC_Control/barcodes.csv'
gene  = './dataset/PDAC_Control/features.csv'
subprocess.run(["Rscript", "trajectory_inference.R", dataset, mtx, barcode, gene])

Frequency information generation

In this step, we harness the power of wavelet transformation to extract detailed frequency information from the gene expression data. By leveraging the trajectory information obtained from Monocle3—which orders cells along a pseudotime axis—we can capture both the temporal progression and the underlying periodic patterns of gene expression.

Wavelet transformation decomposes the gene expression profiles into various frequency components, enabling us to detect subtle oscillations and rhythmic behaviors that are often not apparent in the time domain alone. This multi-scale analysis helps reveal hidden periodicities and enriches our understanding of gene regulatory mechanisms.

By integrating the frequency-domain features with the temporal trajectory and expression, we achieve a more nuanced analysis. The frequency information complements the time-domain data, enhancing gene clustering. Ultimately, this combined approach provides a comprehensive view of the dynamic changes in gene expression, paving the way for deeper insights into cellular functions and regulatory processes.

[5]:
trajectory_info = pd.read_csv("PDAC.csv")
mtx = sc.read_mtx(mtx)
mtx = mtx.X.T
barcode = pd.read_csv(barcode,sep=',',index_col=0)
gene  = pd.read_csv(gene,header=0,index_col = 0)
adata = anndata.AnnData(mtx,barcode,gene)
frequency_extract(trajectory_info, adata, dataset)

Part 2: Model preparation and training

GCN graph preparation

In this phase, we utilize the Mippie PPI database to extract gene-gene interaction information, thereby constructing the graph structure for our Graph Convolutional Network (GCN). Specifically, the database provides gene interaction data that has been validated by both experimental evidence and computational predictions. We treat these interactions as edges in the graph, with each gene represented as a node. By integrating this biologically informed network structure with the previously obtained gene expression and frequency information, the GCN model is better equipped to capture the regulatory relationships and functional synergies between genes. This integration ultimately enhances the accuracy and interpretability of gene clustering and biomarker identification during model training.

[6]:
gene_id = gene.index.to_list()
pd.Series(gene_id).to_csv(
    'PDAC.txt',
    index=False,
    header=False
)
!java -jar HIPPIE_NC.jar -i=./PDAC.txt -t=e -o=out_PDAC.txt -s=0.5
graph_df = pd.read_csv('out_PDAC.txt', sep='\t', header=None)
build_graph_mouse(graph_df,gene_info)

Modle training

In this stage, the model is trained using time, frequency, and expression data, along with the previously constructed graph. This integration allows the model to learn a comprehensive latent embedding that encapsulates the intricate relationships among genes. Once the model has been trained, we apply the Leiden algorithm to the latent space to identify gene clusters. These clusters represent groups of genes with similar expression dynamics and regulatory patterns, providing a valuable basis for further biological insights and downstream analysis.

[7]:
GeneRhythm_Model(input_data = 'PDAC.npy',graph='graph_index.npy',sc_data = adata)

____________________________
Start Training VAE...
torch.Size([1976, 250])
Epochs: 1, AvgLoss: 61.1784
torch.Size([1976, 250])
Epochs: 2, AvgLoss: 61.0733
torch.Size([1976, 250])
Epochs: 3, AvgLoss: 60.9595
torch.Size([1976, 250])
Epochs: 4, AvgLoss: 60.8456
torch.Size([1976, 250])
Epochs: 5, AvgLoss: 60.7324
torch.Size([1976, 250])
Epochs: 6, AvgLoss: 60.6032
torch.Size([1976, 250])
Epochs: 7, AvgLoss: 60.4694
torch.Size([1976, 250])
Epochs: 8, AvgLoss: 60.3244
torch.Size([1976, 250])
Epochs: 9, AvgLoss: 60.1658
torch.Size([1976, 250])
Epochs: 10, AvgLoss: 59.9907
torch.Size([1976, 250])
Epochs: 11, AvgLoss: 59.8120
torch.Size([1976, 250])
Epochs: 12, AvgLoss: 59.6022
torch.Size([1976, 250])
Epochs: 13, AvgLoss: 59.3655
torch.Size([1976, 250])
Epochs: 14, AvgLoss: 59.0947
torch.Size([1976, 250])
Epochs: 15, AvgLoss: 58.8603
torch.Size([1976, 250])
Epochs: 16, AvgLoss: 58.5570
torch.Size([1976, 250])
Epochs: 17, AvgLoss: 58.2088
torch.Size([1976, 250])
Epochs: 18, AvgLoss: 57.8403
torch.Size([1976, 250])
Epochs: 19, AvgLoss: 57.4095
torch.Size([1976, 250])
Epochs: 20, AvgLoss: 56.9473
torch.Size([1976, 250])
Epochs: 21, AvgLoss: 56.4384
torch.Size([1976, 250])
Epochs: 22, AvgLoss: 55.7959
torch.Size([1976, 250])
Epochs: 23, AvgLoss: 55.2494
torch.Size([1976, 250])
Epochs: 24, AvgLoss: 54.6328
torch.Size([1976, 250])
Epochs: 25, AvgLoss: 53.8704
torch.Size([1976, 250])
Epochs: 26, AvgLoss: 53.0100
torch.Size([1976, 250])
Epochs: 27, AvgLoss: 52.3167
torch.Size([1976, 250])
Epochs: 28, AvgLoss: 51.2830
torch.Size([1976, 250])
Epochs: 29, AvgLoss: 50.4395
torch.Size([1976, 250])
Epochs: 30, AvgLoss: 49.4568
torch.Size([1976, 250])
Epochs: 31, AvgLoss: 48.5318
torch.Size([1976, 250])
Epochs: 32, AvgLoss: 47.5376
torch.Size([1976, 250])
Epochs: 33, AvgLoss: 46.5704
torch.Size([1976, 250])
Epochs: 34, AvgLoss: 45.7372
torch.Size([1976, 250])
Epochs: 35, AvgLoss: 44.8579
torch.Size([1976, 250])
Epochs: 36, AvgLoss: 44.0273
torch.Size([1976, 250])
Epochs: 37, AvgLoss: 43.4041
torch.Size([1976, 250])
Epochs: 38, AvgLoss: 42.6524
torch.Size([1976, 250])
Epochs: 39, AvgLoss: 42.0832
torch.Size([1976, 250])
Epochs: 40, AvgLoss: 41.5959
torch.Size([1976, 250])
Epochs: 41, AvgLoss: 41.0062
torch.Size([1976, 250])
Epochs: 42, AvgLoss: 40.6444
torch.Size([1976, 250])
Epochs: 43, AvgLoss: 40.2739
torch.Size([1976, 250])
Epochs: 44, AvgLoss: 39.8611
torch.Size([1976, 250])
Epochs: 45, AvgLoss: 39.4116
torch.Size([1976, 250])
Epochs: 46, AvgLoss: 39.2223
torch.Size([1976, 250])
Epochs: 47, AvgLoss: 38.9917
torch.Size([1976, 250])
Epochs: 48, AvgLoss: 38.7184
torch.Size([1976, 250])
Epochs: 49, AvgLoss: 38.6470
torch.Size([1976, 250])
Epochs: 50, AvgLoss: 38.4546
torch.Size([1976, 250])
Epochs: 51, AvgLoss: 38.2534
torch.Size([1976, 250])
Epochs: 52, AvgLoss: 38.2026
torch.Size([1976, 250])
Epochs: 53, AvgLoss: 38.0252
torch.Size([1976, 250])
Epochs: 54, AvgLoss: 37.9663
torch.Size([1976, 250])
Epochs: 55, AvgLoss: 37.9397
torch.Size([1976, 250])
Epochs: 56, AvgLoss: 37.8507
torch.Size([1976, 250])
Epochs: 57, AvgLoss: 37.8251
torch.Size([1976, 250])
Epochs: 58, AvgLoss: 37.7365
torch.Size([1976, 250])
Epochs: 59, AvgLoss: 37.6874
torch.Size([1976, 250])
Epochs: 60, AvgLoss: 37.6890
torch.Size([1976, 250])
Epochs: 61, AvgLoss: 37.6402
torch.Size([1976, 250])
Epochs: 62, AvgLoss: 37.5960
torch.Size([1976, 250])
Epochs: 63, AvgLoss: 37.5748
torch.Size([1976, 250])
Epochs: 64, AvgLoss: 37.5459
torch.Size([1976, 250])
Epochs: 65, AvgLoss: 37.4876
torch.Size([1976, 250])
Epochs: 66, AvgLoss: 37.4533
torch.Size([1976, 250])
Epochs: 67, AvgLoss: 37.3590
torch.Size([1976, 250])
Epochs: 68, AvgLoss: 37.2756
torch.Size([1976, 250])
Epochs: 69, AvgLoss: 37.2858
torch.Size([1976, 250])
Epochs: 70, AvgLoss: 37.2780
torch.Size([1976, 250])
Epochs: 71, AvgLoss: 37.1926
torch.Size([1976, 250])
Epochs: 72, AvgLoss: 37.1021
torch.Size([1976, 250])
Epochs: 73, AvgLoss: 37.0240
torch.Size([1976, 250])
Epochs: 74, AvgLoss: 37.0773
torch.Size([1976, 250])
Epochs: 75, AvgLoss: 37.0507
torch.Size([1976, 250])
Epochs: 76, AvgLoss: 37.0273
torch.Size([1976, 250])
Epochs: 77, AvgLoss: 36.9721
torch.Size([1976, 250])
Epochs: 78, AvgLoss: 36.8884
torch.Size([1976, 250])
Epochs: 79, AvgLoss: 36.8808
torch.Size([1976, 250])
Epochs: 80, AvgLoss: 36.8230
torch.Size([1976, 250])
Epochs: 81, AvgLoss: 36.7170
torch.Size([1976, 250])
Epochs: 82, AvgLoss: 36.7805
torch.Size([1976, 250])
Epochs: 83, AvgLoss: 36.7292
torch.Size([1976, 250])
Epochs: 84, AvgLoss: 36.7329
torch.Size([1976, 250])
Epochs: 85, AvgLoss: 36.6036
torch.Size([1976, 250])
Epochs: 86, AvgLoss: 36.6161
torch.Size([1976, 250])
Epochs: 87, AvgLoss: 36.5348
torch.Size([1976, 250])
Epochs: 88, AvgLoss: 36.5202
torch.Size([1976, 250])
Epochs: 89, AvgLoss: 36.4723
torch.Size([1976, 250])
Epochs: 90, AvgLoss: 36.4672
torch.Size([1976, 250])
Epochs: 91, AvgLoss: 36.3867
torch.Size([1976, 250])
Epochs: 92, AvgLoss: 36.3737
torch.Size([1976, 250])
Epochs: 93, AvgLoss: 36.2975
torch.Size([1976, 250])
Epochs: 94, AvgLoss: 36.3010
torch.Size([1976, 250])
Epochs: 95, AvgLoss: 36.2380
torch.Size([1976, 250])
Epochs: 96, AvgLoss: 36.1668
torch.Size([1976, 250])
Epochs: 97, AvgLoss: 36.1449
torch.Size([1976, 250])
Epochs: 98, AvgLoss: 36.1306
torch.Size([1976, 250])
Epochs: 99, AvgLoss: 36.0621
torch.Size([1976, 250])
Epochs: 100, AvgLoss: 36.0481
torch.Size([1976, 250])
Epochs: 101, AvgLoss: 35.9848
torch.Size([1976, 250])
Epochs: 102, AvgLoss: 35.9509
torch.Size([1976, 250])
Epochs: 103, AvgLoss: 35.9186
torch.Size([1976, 250])
Epochs: 104, AvgLoss: 35.8999
torch.Size([1976, 250])
Epochs: 105, AvgLoss: 35.8258
torch.Size([1976, 250])
Epochs: 106, AvgLoss: 35.8325
torch.Size([1976, 250])
Epochs: 107, AvgLoss: 35.7987
torch.Size([1976, 250])
Epochs: 108, AvgLoss: 35.7575
torch.Size([1976, 250])
Epochs: 109, AvgLoss: 35.7261
torch.Size([1976, 250])
Epochs: 110, AvgLoss: 35.6974
torch.Size([1976, 250])
Epochs: 111, AvgLoss: 35.6881
torch.Size([1976, 250])
Epochs: 112, AvgLoss: 35.6504
torch.Size([1976, 250])
Epochs: 113, AvgLoss: 35.6312
torch.Size([1976, 250])
Epochs: 114, AvgLoss: 35.6040
torch.Size([1976, 250])
Epochs: 115, AvgLoss: 35.5738
torch.Size([1976, 250])
Epochs: 116, AvgLoss: 35.5416
torch.Size([1976, 250])
Epochs: 117, AvgLoss: 35.5355
torch.Size([1976, 250])
Epochs: 118, AvgLoss: 35.4946
torch.Size([1976, 250])
Epochs: 119, AvgLoss: 35.4830
torch.Size([1976, 250])
Epochs: 120, AvgLoss: 35.4660
torch.Size([1976, 250])
Epochs: 121, AvgLoss: 35.4510
torch.Size([1976, 250])
Epochs: 122, AvgLoss: 35.4364
torch.Size([1976, 250])
Epochs: 123, AvgLoss: 35.3916
torch.Size([1976, 250])
Epochs: 124, AvgLoss: 35.4018
torch.Size([1976, 250])
Epochs: 125, AvgLoss: 35.3690
torch.Size([1976, 250])
Epochs: 126, AvgLoss: 35.3416
torch.Size([1976, 250])
Epochs: 127, AvgLoss: 35.3350
torch.Size([1976, 250])
Epochs: 128, AvgLoss: 35.3176
torch.Size([1976, 250])
Epochs: 129, AvgLoss: 35.2928
torch.Size([1976, 250])
Epochs: 130, AvgLoss: 35.2707
torch.Size([1976, 250])
Epochs: 131, AvgLoss: 35.2512
torch.Size([1976, 250])
Epochs: 132, AvgLoss: 35.2447
torch.Size([1976, 250])
Epochs: 133, AvgLoss: 35.1962
torch.Size([1976, 250])
Epochs: 134, AvgLoss: 35.2171
torch.Size([1976, 250])
Epochs: 135, AvgLoss: 35.1735
torch.Size([1976, 250])
Epochs: 136, AvgLoss: 35.1476
torch.Size([1976, 250])
Epochs: 137, AvgLoss: 35.1333
torch.Size([1976, 250])
Epochs: 138, AvgLoss: 35.1139
torch.Size([1976, 250])
Epochs: 139, AvgLoss: 35.0876
torch.Size([1976, 250])
Epochs: 140, AvgLoss: 35.0622
torch.Size([1976, 250])
Epochs: 141, AvgLoss: 35.0387
torch.Size([1976, 250])
Epochs: 142, AvgLoss: 35.0276
torch.Size([1976, 250])
Epochs: 143, AvgLoss: 35.0020
torch.Size([1976, 250])
Epochs: 144, AvgLoss: 34.9714
torch.Size([1976, 250])
Epochs: 145, AvgLoss: 34.9774
torch.Size([1976, 250])
Epochs: 146, AvgLoss: 34.9330
torch.Size([1976, 250])
Epochs: 147, AvgLoss: 34.9082
torch.Size([1976, 250])
Epochs: 148, AvgLoss: 34.8806
torch.Size([1976, 250])
Epochs: 149, AvgLoss: 34.8587
torch.Size([1976, 250])
Epochs: 150, AvgLoss: 34.8644
torch.Size([1976, 250])
Epochs: 151, AvgLoss: 34.8321
torch.Size([1976, 250])
Epochs: 152, AvgLoss: 34.7980
torch.Size([1976, 250])
Epochs: 153, AvgLoss: 34.7721
torch.Size([1976, 250])
Epochs: 154, AvgLoss: 34.7337
torch.Size([1976, 250])
Epochs: 155, AvgLoss: 34.7185
torch.Size([1976, 250])
Epochs: 156, AvgLoss: 34.6905
torch.Size([1976, 250])
Epochs: 157, AvgLoss: 34.6630
torch.Size([1976, 250])
Epochs: 158, AvgLoss: 34.6182
torch.Size([1976, 250])
Epochs: 159, AvgLoss: 34.6304
torch.Size([1976, 250])
Epochs: 160, AvgLoss: 34.5781
torch.Size([1976, 250])
Epochs: 161, AvgLoss: 34.5460
torch.Size([1976, 250])
Epochs: 162, AvgLoss: 34.5145
torch.Size([1976, 250])
Epochs: 163, AvgLoss: 34.4964
torch.Size([1976, 250])
Epochs: 164, AvgLoss: 34.4530
torch.Size([1976, 250])
Epochs: 165, AvgLoss: 34.4372
torch.Size([1976, 250])
Epochs: 166, AvgLoss: 34.4145
torch.Size([1976, 250])
Epochs: 167, AvgLoss: 34.3660
torch.Size([1976, 250])
Epochs: 168, AvgLoss: 34.3187
torch.Size([1976, 250])
Epochs: 169, AvgLoss: 34.2902
torch.Size([1976, 250])
Epochs: 170, AvgLoss: 34.2556
torch.Size([1976, 250])
Epochs: 171, AvgLoss: 34.2129
torch.Size([1976, 250])
Epochs: 172, AvgLoss: 34.1892
torch.Size([1976, 250])
Epochs: 173, AvgLoss: 34.1626
torch.Size([1976, 250])
Epochs: 174, AvgLoss: 34.1170
torch.Size([1976, 250])
Epochs: 175, AvgLoss: 34.0858
torch.Size([1976, 250])
Epochs: 176, AvgLoss: 34.0459
torch.Size([1976, 250])
Epochs: 177, AvgLoss: 34.0081
torch.Size([1976, 250])
Epochs: 178, AvgLoss: 33.9701
torch.Size([1976, 250])
Epochs: 179, AvgLoss: 33.9421
torch.Size([1976, 250])
Epochs: 180, AvgLoss: 33.8961
torch.Size([1976, 250])
Epochs: 181, AvgLoss: 33.8574
torch.Size([1976, 250])
Epochs: 182, AvgLoss: 33.8200
torch.Size([1976, 250])
Epochs: 183, AvgLoss: 33.7908
torch.Size([1976, 250])
Epochs: 184, AvgLoss: 33.7597
torch.Size([1976, 250])
Epochs: 185, AvgLoss: 33.7143
torch.Size([1976, 250])
Epochs: 186, AvgLoss: 33.6723
torch.Size([1976, 250])
Epochs: 187, AvgLoss: 33.6472
torch.Size([1976, 250])
Epochs: 188, AvgLoss: 33.6035
torch.Size([1976, 250])
Epochs: 189, AvgLoss: 33.5697
torch.Size([1976, 250])
Epochs: 190, AvgLoss: 33.5422
torch.Size([1976, 250])
Epochs: 191, AvgLoss: 33.5017
torch.Size([1976, 250])
Epochs: 192, AvgLoss: 33.4689
torch.Size([1976, 250])
Epochs: 193, AvgLoss: 33.4313
torch.Size([1976, 250])
Epochs: 194, AvgLoss: 33.4082
torch.Size([1976, 250])
Epochs: 195, AvgLoss: 33.3752
torch.Size([1976, 250])
Epochs: 196, AvgLoss: 33.3440
torch.Size([1976, 250])
Epochs: 197, AvgLoss: 33.3134
torch.Size([1976, 250])
Epochs: 198, AvgLoss: 33.2853
torch.Size([1976, 250])
Epochs: 199, AvgLoss: 33.2510
torch.Size([1976, 250])
Epochs: 200, AvgLoss: 33.2211
torch.Size([1976, 250])
Epochs: 201, AvgLoss: 33.1962
torch.Size([1976, 250])
Epochs: 202, AvgLoss: 33.1684
torch.Size([1976, 250])
Epochs: 203, AvgLoss: 33.1416
torch.Size([1976, 250])
Epochs: 204, AvgLoss: 33.1194
torch.Size([1976, 250])
Epochs: 205, AvgLoss: 33.0905
torch.Size([1976, 250])
Epochs: 206, AvgLoss: 33.0669
torch.Size([1976, 250])
Epochs: 207, AvgLoss: 33.0398
torch.Size([1976, 250])
Epochs: 208, AvgLoss: 33.0132
torch.Size([1976, 250])
Epochs: 209, AvgLoss: 32.9914
torch.Size([1976, 250])
Epochs: 210, AvgLoss: 32.9657
torch.Size([1976, 250])
Epochs: 211, AvgLoss: 32.9419
torch.Size([1976, 250])
Epochs: 212, AvgLoss: 32.9160
torch.Size([1976, 250])
Epochs: 213, AvgLoss: 32.8924
torch.Size([1976, 250])
Epochs: 214, AvgLoss: 32.8662
torch.Size([1976, 250])
Epochs: 215, AvgLoss: 32.8452
torch.Size([1976, 250])
Epochs: 216, AvgLoss: 32.8206
torch.Size([1976, 250])
Epochs: 217, AvgLoss: 32.7951
torch.Size([1976, 250])
Epochs: 218, AvgLoss: 32.7709
torch.Size([1976, 250])
Epochs: 219, AvgLoss: 32.7504
torch.Size([1976, 250])
Epochs: 220, AvgLoss: 32.7258
torch.Size([1976, 250])
Epochs: 221, AvgLoss: 32.7013
torch.Size([1976, 250])
Epochs: 222, AvgLoss: 32.6786
torch.Size([1976, 250])
Epochs: 223, AvgLoss: 32.6537
torch.Size([1976, 250])
Epochs: 224, AvgLoss: 32.6333
torch.Size([1976, 250])
Epochs: 225, AvgLoss: 32.6071
torch.Size([1976, 250])
Epochs: 226, AvgLoss: 32.5862
torch.Size([1976, 250])
Epochs: 227, AvgLoss: 32.5629
torch.Size([1976, 250])
Epochs: 228, AvgLoss: 32.5413
torch.Size([1976, 250])
Epochs: 229, AvgLoss: 32.5220
torch.Size([1976, 250])
Epochs: 230, AvgLoss: 32.4977
torch.Size([1976, 250])
Epochs: 231, AvgLoss: 32.4777
torch.Size([1976, 250])
Epochs: 232, AvgLoss: 32.4565
torch.Size([1976, 250])
Epochs: 233, AvgLoss: 32.4344
torch.Size([1976, 250])
Epochs: 234, AvgLoss: 32.4116
torch.Size([1976, 250])
Epochs: 235, AvgLoss: 32.3906
torch.Size([1976, 250])
Epochs: 236, AvgLoss: 32.3728
torch.Size([1976, 250])
Epochs: 237, AvgLoss: 32.3500
torch.Size([1976, 250])
Epochs: 238, AvgLoss: 32.3282
torch.Size([1976, 250])
Epochs: 239, AvgLoss: 32.3063
torch.Size([1976, 250])
Epochs: 240, AvgLoss: 32.2858
torch.Size([1976, 250])
Epochs: 241, AvgLoss: 32.2655
torch.Size([1976, 250])
Epochs: 242, AvgLoss: 32.2450
torch.Size([1976, 250])
Epochs: 243, AvgLoss: 32.2259
torch.Size([1976, 250])
Epochs: 244, AvgLoss: 32.2041
torch.Size([1976, 250])
Epochs: 245, AvgLoss: 32.1839
torch.Size([1976, 250])
Epochs: 246, AvgLoss: 32.1665
torch.Size([1976, 250])
Epochs: 247, AvgLoss: 32.1488
torch.Size([1976, 250])
Epochs: 248, AvgLoss: 32.1303
torch.Size([1976, 250])
Epochs: 249, AvgLoss: 32.1142
torch.Size([1976, 250])
Epochs: 250, AvgLoss: 32.0981
torch.Size([1976, 250])
Epochs: 251, AvgLoss: 32.0830
torch.Size([1976, 250])
Epochs: 252, AvgLoss: 32.0686
torch.Size([1976, 250])
Epochs: 253, AvgLoss: 32.0537
torch.Size([1976, 250])
Epochs: 254, AvgLoss: 32.0384
torch.Size([1976, 250])
Epochs: 255, AvgLoss: 32.0233
torch.Size([1976, 250])
Epochs: 256, AvgLoss: 32.0072
torch.Size([1976, 250])
Epochs: 257, AvgLoss: 31.9917
torch.Size([1976, 250])
Epochs: 258, AvgLoss: 31.9754
torch.Size([1976, 250])
Epochs: 259, AvgLoss: 31.9594
torch.Size([1976, 250])
Epochs: 260, AvgLoss: 31.9419
torch.Size([1976, 250])
Epochs: 261, AvgLoss: 31.9252
torch.Size([1976, 250])
Epochs: 262, AvgLoss: 31.9056
torch.Size([1976, 250])
Epochs: 263, AvgLoss: 31.8864
torch.Size([1976, 250])
Epochs: 264, AvgLoss: 31.8648
torch.Size([1976, 250])
Epochs: 265, AvgLoss: 31.8408
torch.Size([1976, 250])
Epochs: 266, AvgLoss: 31.8145
torch.Size([1976, 250])
Epochs: 267, AvgLoss: 31.7850
torch.Size([1976, 250])
Epochs: 268, AvgLoss: 31.7519
torch.Size([1976, 250])
Epochs: 269, AvgLoss: 31.7135
torch.Size([1976, 250])
Epochs: 270, AvgLoss: 31.6700
torch.Size([1976, 250])
Epochs: 271, AvgLoss: 31.6182
torch.Size([1976, 250])
Epochs: 272, AvgLoss: 31.5607
torch.Size([1976, 250])
Epochs: 273, AvgLoss: 31.4952
torch.Size([1976, 250])
Epochs: 274, AvgLoss: 31.4236
torch.Size([1976, 250])
Epochs: 275, AvgLoss: 31.3482
torch.Size([1976, 250])
Epochs: 276, AvgLoss: 31.2754
torch.Size([1976, 250])
Epochs: 277, AvgLoss: 31.2053
torch.Size([1976, 250])
Epochs: 278, AvgLoss: 31.1433
torch.Size([1976, 250])
Epochs: 279, AvgLoss: 31.0896
torch.Size([1976, 250])
Epochs: 280, AvgLoss: 31.0411
torch.Size([1976, 250])
Epochs: 281, AvgLoss: 31.0003
torch.Size([1976, 250])
Epochs: 282, AvgLoss: 30.9580
torch.Size([1976, 250])
Epochs: 283, AvgLoss: 30.9157
torch.Size([1976, 250])
Epochs: 284, AvgLoss: 30.8708
torch.Size([1976, 250])
Epochs: 285, AvgLoss: 30.8267
torch.Size([1976, 250])
Epochs: 286, AvgLoss: 30.7836
torch.Size([1976, 250])
Epochs: 287, AvgLoss: 30.7413
torch.Size([1976, 250])
Epochs: 288, AvgLoss: 30.7035
torch.Size([1976, 250])
Epochs: 289, AvgLoss: 30.6656
torch.Size([1976, 250])
Epochs: 290, AvgLoss: 30.6328
torch.Size([1976, 250])
Epochs: 291, AvgLoss: 30.5973
torch.Size([1976, 250])
Epochs: 292, AvgLoss: 30.5661
torch.Size([1976, 250])
Epochs: 293, AvgLoss: 30.5372
torch.Size([1976, 250])
Epochs: 294, AvgLoss: 30.5093
torch.Size([1976, 250])
Epochs: 295, AvgLoss: 30.4850
torch.Size([1976, 250])
Epochs: 296, AvgLoss: 30.4662
torch.Size([1976, 250])
Epochs: 297, AvgLoss: 30.4512
torch.Size([1976, 250])
Epochs: 298, AvgLoss: 30.4414
torch.Size([1976, 250])
Epochs: 299, AvgLoss: 30.4330
torch.Size([1976, 250])
Epochs: 300, AvgLoss: 30.4254
torch.Size([1976, 250])
Epochs: 301, AvgLoss: 30.4175
torch.Size([1976, 250])
Epochs: 302, AvgLoss: 30.4105
torch.Size([1976, 250])
Epochs: 303, AvgLoss: 30.4049
torch.Size([1976, 250])
Epochs: 304, AvgLoss: 30.3983
torch.Size([1976, 250])
Epochs: 305, AvgLoss: 30.3910
torch.Size([1976, 250])
Epochs: 306, AvgLoss: 30.3854
torch.Size([1976, 250])
Epochs: 307, AvgLoss: 30.3806
torch.Size([1976, 250])
Epochs: 308, AvgLoss: 30.3758
torch.Size([1976, 250])
Epochs: 309, AvgLoss: 30.3701
torch.Size([1976, 250])
Epochs: 310, AvgLoss: 30.3660
torch.Size([1976, 250])
Epochs: 311, AvgLoss: 30.3612
torch.Size([1976, 250])
Epochs: 312, AvgLoss: 30.3563
torch.Size([1976, 250])
Epochs: 313, AvgLoss: 30.3521
torch.Size([1976, 250])
Epochs: 314, AvgLoss: 30.3483
torch.Size([1976, 250])
Epochs: 315, AvgLoss: 30.3442
torch.Size([1976, 250])
Epochs: 316, AvgLoss: 30.3403
torch.Size([1976, 250])
Epochs: 317, AvgLoss: 30.3368
torch.Size([1976, 250])
Epochs: 318, AvgLoss: 30.3330
torch.Size([1976, 250])
Epochs: 319, AvgLoss: 30.3304
torch.Size([1976, 250])
Epochs: 320, AvgLoss: 30.3269
torch.Size([1976, 250])
Epochs: 321, AvgLoss: 30.3238
torch.Size([1976, 250])
Epochs: 322, AvgLoss: 30.3211
torch.Size([1976, 250])
Epochs: 323, AvgLoss: 30.3180
torch.Size([1976, 250])
Epochs: 324, AvgLoss: 30.3153
torch.Size([1976, 250])
Epochs: 325, AvgLoss: 30.3119
torch.Size([1976, 250])
Epochs: 326, AvgLoss: 30.3089
torch.Size([1976, 250])
Epochs: 327, AvgLoss: 30.3067
torch.Size([1976, 250])
Epochs: 328, AvgLoss: 30.3038
torch.Size([1976, 250])
Epochs: 329, AvgLoss: 30.3015
torch.Size([1976, 250])
Epochs: 330, AvgLoss: 30.2993
torch.Size([1976, 250])
Epochs: 331, AvgLoss: 30.2966
torch.Size([1976, 250])
Epochs: 332, AvgLoss: 30.2940
torch.Size([1976, 250])
Epochs: 333, AvgLoss: 30.2918
torch.Size([1976, 250])
Epochs: 334, AvgLoss: 30.2897
torch.Size([1976, 250])
Epochs: 335, AvgLoss: 30.2876
torch.Size([1976, 250])
Epochs: 336, AvgLoss: 30.2852
torch.Size([1976, 250])
Epochs: 337, AvgLoss: 30.2830
torch.Size([1976, 250])
Epochs: 338, AvgLoss: 30.2806
torch.Size([1976, 250])
Epochs: 339, AvgLoss: 30.2784
torch.Size([1976, 250])
Epochs: 340, AvgLoss: 30.2761
torch.Size([1976, 250])
Epochs: 341, AvgLoss: 30.2743
torch.Size([1976, 250])
Epochs: 342, AvgLoss: 30.2719
torch.Size([1976, 250])
Epochs: 343, AvgLoss: 30.2697
torch.Size([1976, 250])
Epochs: 344, AvgLoss: 30.2676
torch.Size([1976, 250])
Epochs: 345, AvgLoss: 30.2646
torch.Size([1976, 250])
Epochs: 346, AvgLoss: 30.2622
torch.Size([1976, 250])
Epochs: 347, AvgLoss: 30.2599
torch.Size([1976, 250])
Epochs: 348, AvgLoss: 30.2574
torch.Size([1976, 250])
Epochs: 349, AvgLoss: 30.2555
torch.Size([1976, 250])
Epochs: 350, AvgLoss: 30.2531
torch.Size([1976, 250])
Epochs: 351, AvgLoss: 30.2517
torch.Size([1976, 250])
Epochs: 352, AvgLoss: 30.2493
torch.Size([1976, 250])
Epochs: 353, AvgLoss: 30.2463
torch.Size([1976, 250])
Epochs: 354, AvgLoss: 30.2443
torch.Size([1976, 250])
Epochs: 355, AvgLoss: 30.2419
torch.Size([1976, 250])
Epochs: 356, AvgLoss: 30.2393
torch.Size([1976, 250])
Epochs: 357, AvgLoss: 30.2374
torch.Size([1976, 250])
Epochs: 358, AvgLoss: 30.2348
torch.Size([1976, 250])
Epochs: 359, AvgLoss: 30.2325
torch.Size([1976, 250])
Epochs: 360, AvgLoss: 30.2303
torch.Size([1976, 250])
Epochs: 361, AvgLoss: 30.2272
torch.Size([1976, 250])
Epochs: 362, AvgLoss: 30.2247
torch.Size([1976, 250])
Epochs: 363, AvgLoss: 30.2222
torch.Size([1976, 250])
Epochs: 364, AvgLoss: 30.2197
torch.Size([1976, 250])
Epochs: 365, AvgLoss: 30.2167
torch.Size([1976, 250])
Epochs: 366, AvgLoss: 30.2142
torch.Size([1976, 250])
Epochs: 367, AvgLoss: 30.2116
torch.Size([1976, 250])
Epochs: 368, AvgLoss: 30.2083
torch.Size([1976, 250])
Epochs: 369, AvgLoss: 30.2056
torch.Size([1976, 250])
Epochs: 370, AvgLoss: 30.2027
torch.Size([1976, 250])
Epochs: 371, AvgLoss: 30.1996
torch.Size([1976, 250])
Epochs: 372, AvgLoss: 30.1968
torch.Size([1976, 250])
Epochs: 373, AvgLoss: 30.1934
torch.Size([1976, 250])
Epochs: 374, AvgLoss: 30.1903
torch.Size([1976, 250])
Epochs: 375, AvgLoss: 30.1872
torch.Size([1976, 250])
Epochs: 376, AvgLoss: 30.1837
torch.Size([1976, 250])
Epochs: 377, AvgLoss: 30.1801
torch.Size([1976, 250])
Epochs: 378, AvgLoss: 30.1768
torch.Size([1976, 250])
Epochs: 379, AvgLoss: 30.1735
torch.Size([1976, 250])
Epochs: 380, AvgLoss: 30.1702
torch.Size([1976, 250])
Epochs: 381, AvgLoss: 30.1667
torch.Size([1976, 250])
Epochs: 382, AvgLoss: 30.1632
torch.Size([1976, 250])
Epochs: 383, AvgLoss: 30.1600
torch.Size([1976, 250])
Epochs: 384, AvgLoss: 30.1566
torch.Size([1976, 250])
Epochs: 385, AvgLoss: 30.1531
torch.Size([1976, 250])
Epochs: 386, AvgLoss: 30.1502
torch.Size([1976, 250])
Epochs: 387, AvgLoss: 30.1468
torch.Size([1976, 250])
Epochs: 388, AvgLoss: 30.1433
torch.Size([1976, 250])
Epochs: 389, AvgLoss: 30.1400
torch.Size([1976, 250])
Epochs: 390, AvgLoss: 30.1362
torch.Size([1976, 250])
Epochs: 391, AvgLoss: 30.1338
torch.Size([1976, 250])
Epochs: 392, AvgLoss: 30.1298
torch.Size([1976, 250])
Epochs: 393, AvgLoss: 30.1269
torch.Size([1976, 250])
Epochs: 394, AvgLoss: 30.1239
torch.Size([1976, 250])
Epochs: 395, AvgLoss: 30.1204
torch.Size([1976, 250])
Epochs: 396, AvgLoss: 30.1176
torch.Size([1976, 250])
Epochs: 397, AvgLoss: 30.1142
torch.Size([1976, 250])
Epochs: 398, AvgLoss: 30.1120
torch.Size([1976, 250])
Epochs: 399, AvgLoss: 30.1090
torch.Size([1976, 250])
Epochs: 400, AvgLoss: 30.1064
torch.Size([1976, 250])
Epochs: 401, AvgLoss: 30.1039
torch.Size([1976, 250])
Epochs: 402, AvgLoss: 30.1020
torch.Size([1976, 250])
Epochs: 403, AvgLoss: 30.0982
torch.Size([1976, 250])
Epochs: 404, AvgLoss: 30.0940
torch.Size([1976, 250])
Epochs: 405, AvgLoss: 30.0905
torch.Size([1976, 250])
Epochs: 406, AvgLoss: 30.0879
torch.Size([1976, 250])
Epochs: 407, AvgLoss: 30.0859
torch.Size([1976, 250])
Epochs: 408, AvgLoss: 30.0826
torch.Size([1976, 250])
Epochs: 409, AvgLoss: 30.0781
torch.Size([1976, 250])
Epochs: 410, AvgLoss: 30.0754
torch.Size([1976, 250])
Epochs: 411, AvgLoss: 30.0735
torch.Size([1976, 250])
Epochs: 412, AvgLoss: 30.0704
torch.Size([1976, 250])
Epochs: 413, AvgLoss: 30.0666
torch.Size([1976, 250])
Epochs: 414, AvgLoss: 30.0626
torch.Size([1976, 250])
Epochs: 415, AvgLoss: 30.0602
torch.Size([1976, 250])
Epochs: 416, AvgLoss: 30.0580
torch.Size([1976, 250])
Epochs: 417, AvgLoss: 30.0543
torch.Size([1976, 250])
Epochs: 418, AvgLoss: 30.0514
torch.Size([1976, 250])
Epochs: 419, AvgLoss: 30.0473
torch.Size([1976, 250])
Epochs: 420, AvgLoss: 30.0446
torch.Size([1976, 250])
Epochs: 421, AvgLoss: 30.0420
torch.Size([1976, 250])
Epochs: 422, AvgLoss: 30.0383
torch.Size([1976, 250])
Epochs: 423, AvgLoss: 30.0349
torch.Size([1976, 250])
Epochs: 424, AvgLoss: 30.0318
torch.Size([1976, 250])
Epochs: 425, AvgLoss: 30.0283
torch.Size([1976, 250])
Epochs: 426, AvgLoss: 30.0253
torch.Size([1976, 250])
Epochs: 427, AvgLoss: 30.0218
torch.Size([1976, 250])
Epochs: 428, AvgLoss: 30.0184
torch.Size([1976, 250])
Epochs: 429, AvgLoss: 30.0147
torch.Size([1976, 250])
Epochs: 430, AvgLoss: 30.0113
torch.Size([1976, 250])
Epochs: 431, AvgLoss: 30.0075
torch.Size([1976, 250])
Epochs: 432, AvgLoss: 30.0031
torch.Size([1976, 250])
Epochs: 433, AvgLoss: 29.9999
torch.Size([1976, 250])
Epochs: 434, AvgLoss: 29.9963
torch.Size([1976, 250])
Epochs: 435, AvgLoss: 29.9928
torch.Size([1976, 250])
Epochs: 436, AvgLoss: 29.9888
torch.Size([1976, 250])
Epochs: 437, AvgLoss: 29.9851
torch.Size([1976, 250])
Epochs: 438, AvgLoss: 29.9806
torch.Size([1976, 250])
Epochs: 439, AvgLoss: 29.9769
torch.Size([1976, 250])
Epochs: 440, AvgLoss: 29.9733
torch.Size([1976, 250])
Epochs: 441, AvgLoss: 29.9700
torch.Size([1976, 250])
Epochs: 442, AvgLoss: 29.9658
torch.Size([1976, 250])
Epochs: 443, AvgLoss: 29.9624
torch.Size([1976, 250])
Epochs: 444, AvgLoss: 29.9585
torch.Size([1976, 250])
Epochs: 445, AvgLoss: 29.9545
torch.Size([1976, 250])
Epochs: 446, AvgLoss: 29.9499
torch.Size([1976, 250])
Epochs: 447, AvgLoss: 29.9462
torch.Size([1976, 250])
Epochs: 448, AvgLoss: 29.9419
torch.Size([1976, 250])
Epochs: 449, AvgLoss: 29.9385
torch.Size([1976, 250])
Epochs: 450, AvgLoss: 29.9346
torch.Size([1976, 250])
Epochs: 451, AvgLoss: 29.9312
torch.Size([1976, 250])
Epochs: 452, AvgLoss: 29.9266
torch.Size([1976, 250])
Epochs: 453, AvgLoss: 29.9230
torch.Size([1976, 250])
Epochs: 454, AvgLoss: 29.9190
torch.Size([1976, 250])
Epochs: 455, AvgLoss: 29.9155
torch.Size([1976, 250])
Epochs: 456, AvgLoss: 29.9113
torch.Size([1976, 250])
Epochs: 457, AvgLoss: 29.9079
torch.Size([1976, 250])
Epochs: 458, AvgLoss: 29.9040
torch.Size([1976, 250])
Epochs: 459, AvgLoss: 29.9006
torch.Size([1976, 250])
Epochs: 460, AvgLoss: 29.8968
torch.Size([1976, 250])
Epochs: 461, AvgLoss: 29.8927
torch.Size([1976, 250])
Epochs: 462, AvgLoss: 29.8896
torch.Size([1976, 250])
Epochs: 463, AvgLoss: 29.8865
torch.Size([1976, 250])
Epochs: 464, AvgLoss: 29.8837
torch.Size([1976, 250])
Epochs: 465, AvgLoss: 29.8803
torch.Size([1976, 250])
Epochs: 466, AvgLoss: 29.8770
torch.Size([1976, 250])
Epochs: 467, AvgLoss: 29.8738
torch.Size([1976, 250])
Epochs: 468, AvgLoss: 29.8700
torch.Size([1976, 250])
Epochs: 469, AvgLoss: 29.8662
torch.Size([1976, 250])
Epochs: 470, AvgLoss: 29.8624
torch.Size([1976, 250])
Epochs: 471, AvgLoss: 29.8603
torch.Size([1976, 250])
Epochs: 472, AvgLoss: 29.8575
torch.Size([1976, 250])
Epochs: 473, AvgLoss: 29.8546
torch.Size([1976, 250])
Epochs: 474, AvgLoss: 29.8514
torch.Size([1976, 250])
Epochs: 475, AvgLoss: 29.8484
torch.Size([1976, 250])
Epochs: 476, AvgLoss: 29.8451
torch.Size([1976, 250])
Epochs: 477, AvgLoss: 29.8420
torch.Size([1976, 250])
Epochs: 478, AvgLoss: 29.8397
torch.Size([1976, 250])
Epochs: 479, AvgLoss: 29.8370
torch.Size([1976, 250])
Epochs: 480, AvgLoss: 29.8347
torch.Size([1976, 250])
Epochs: 481, AvgLoss: 29.8317
torch.Size([1976, 250])
Epochs: 482, AvgLoss: 29.8291
torch.Size([1976, 250])
Epochs: 483, AvgLoss: 29.8263
torch.Size([1976, 250])
Epochs: 484, AvgLoss: 29.8238
torch.Size([1976, 250])
Epochs: 485, AvgLoss: 29.8209
torch.Size([1976, 250])
Epochs: 486, AvgLoss: 29.8188
torch.Size([1976, 250])
Epochs: 487, AvgLoss: 29.8158
torch.Size([1976, 250])
Epochs: 488, AvgLoss: 29.8135
torch.Size([1976, 250])
Epochs: 489, AvgLoss: 29.8118
torch.Size([1976, 250])
Epochs: 490, AvgLoss: 29.8094
torch.Size([1976, 250])
Epochs: 491, AvgLoss: 29.8075
torch.Size([1976, 250])
Epochs: 492, AvgLoss: 29.8052
torch.Size([1976, 250])
Epochs: 493, AvgLoss: 29.8032
torch.Size([1976, 250])
Epochs: 494, AvgLoss: 29.8007
torch.Size([1976, 250])
Epochs: 495, AvgLoss: 29.7990
torch.Size([1976, 250])
Epochs: 496, AvgLoss: 29.7966
torch.Size([1976, 250])
Epochs: 497, AvgLoss: 29.7945
torch.Size([1976, 250])
Epochs: 498, AvgLoss: 29.7926
torch.Size([1976, 250])
Epochs: 499, AvgLoss: 29.7903
torch.Size([1976, 250])
Epochs: 500, AvgLoss: 29.7883
torch.Size([1976, 250])
Epochs: 501, AvgLoss: 29.7866
torch.Size([1976, 250])
Epochs: 502, AvgLoss: 29.7842
torch.Size([1976, 250])
Epochs: 503, AvgLoss: 29.7824
torch.Size([1976, 250])
Epochs: 504, AvgLoss: 29.7807
torch.Size([1976, 250])
Epochs: 505, AvgLoss: 29.7791
torch.Size([1976, 250])
Epochs: 506, AvgLoss: 29.7766
torch.Size([1976, 250])
Epochs: 507, AvgLoss: 29.7749
torch.Size([1976, 250])
Epochs: 508, AvgLoss: 29.7730
torch.Size([1976, 250])
Epochs: 509, AvgLoss: 29.7713
torch.Size([1976, 250])
Epochs: 510, AvgLoss: 29.7697
torch.Size([1976, 250])
Epochs: 511, AvgLoss: 29.7683
torch.Size([1976, 250])
Epochs: 512, AvgLoss: 29.7664
torch.Size([1976, 250])
Epochs: 513, AvgLoss: 29.7649
torch.Size([1976, 250])
Epochs: 514, AvgLoss: 29.7635
torch.Size([1976, 250])
Epochs: 515, AvgLoss: 29.7620
torch.Size([1976, 250])
Epochs: 516, AvgLoss: 29.7605
torch.Size([1976, 250])
Epochs: 517, AvgLoss: 29.7584
torch.Size([1976, 250])
Epochs: 518, AvgLoss: 29.7569
torch.Size([1976, 250])
Epochs: 519, AvgLoss: 29.7556
torch.Size([1976, 250])
Epochs: 520, AvgLoss: 29.7536
torch.Size([1976, 250])
Epochs: 521, AvgLoss: 29.7518
torch.Size([1976, 250])
Epochs: 522, AvgLoss: 29.7499
torch.Size([1976, 250])
Epochs: 523, AvgLoss: 29.7483
torch.Size([1976, 250])
Epochs: 524, AvgLoss: 29.7468
torch.Size([1976, 250])
Epochs: 525, AvgLoss: 29.7454
torch.Size([1976, 250])
Epochs: 526, AvgLoss: 29.7435
torch.Size([1976, 250])
Epochs: 527, AvgLoss: 29.7421
torch.Size([1976, 250])
Epochs: 528, AvgLoss: 29.7410
torch.Size([1976, 250])
Epochs: 529, AvgLoss: 29.7392
torch.Size([1976, 250])
Epochs: 530, AvgLoss: 29.7380
torch.Size([1976, 250])
Epochs: 531, AvgLoss: 29.7366
torch.Size([1976, 250])
Epochs: 532, AvgLoss: 29.7347
torch.Size([1976, 250])
Epochs: 533, AvgLoss: 29.7338
torch.Size([1976, 250])
Epochs: 534, AvgLoss: 29.7316
torch.Size([1976, 250])
Epochs: 535, AvgLoss: 29.7306
torch.Size([1976, 250])
Epochs: 536, AvgLoss: 29.7289
torch.Size([1976, 250])
Epochs: 537, AvgLoss: 29.7272
torch.Size([1976, 250])
Epochs: 538, AvgLoss: 29.7260
torch.Size([1976, 250])
Epochs: 539, AvgLoss: 29.7244
torch.Size([1976, 250])
Epochs: 540, AvgLoss: 29.7231
torch.Size([1976, 250])
Epochs: 541, AvgLoss: 29.7217
torch.Size([1976, 250])
Epochs: 542, AvgLoss: 29.7204
torch.Size([1976, 250])
Epochs: 543, AvgLoss: 29.7191
torch.Size([1976, 250])
Epochs: 544, AvgLoss: 29.7174
torch.Size([1976, 250])
Epochs: 545, AvgLoss: 29.7158
torch.Size([1976, 250])
Epochs: 546, AvgLoss: 29.7145
torch.Size([1976, 250])
Epochs: 547, AvgLoss: 29.7130
torch.Size([1976, 250])
Epochs: 548, AvgLoss: 29.7119
torch.Size([1976, 250])
Epochs: 549, AvgLoss: 29.7103
torch.Size([1976, 250])
Epochs: 550, AvgLoss: 29.7094
torch.Size([1976, 250])
Epochs: 551, AvgLoss: 29.7083
torch.Size([1976, 250])
Epochs: 552, AvgLoss: 29.7071
torch.Size([1976, 250])
Epochs: 553, AvgLoss: 29.7060
torch.Size([1976, 250])
Epochs: 554, AvgLoss: 29.7047
torch.Size([1976, 250])
Epochs: 555, AvgLoss: 29.7038
torch.Size([1976, 250])
Epochs: 556, AvgLoss: 29.7027
torch.Size([1976, 250])
Epochs: 557, AvgLoss: 29.7007
torch.Size([1976, 250])
Epochs: 558, AvgLoss: 29.6982
torch.Size([1976, 250])
Epochs: 559, AvgLoss: 29.6970
torch.Size([1976, 250])
Epochs: 560, AvgLoss: 29.6957
torch.Size([1976, 250])
Epochs: 561, AvgLoss: 29.6946
torch.Size([1976, 250])
Epochs: 562, AvgLoss: 29.6934
torch.Size([1976, 250])
Epochs: 563, AvgLoss: 29.6928
torch.Size([1976, 250])
Epochs: 564, AvgLoss: 29.6911
torch.Size([1976, 250])
Epochs: 565, AvgLoss: 29.6894
torch.Size([1976, 250])
Epochs: 566, AvgLoss: 29.6880
torch.Size([1976, 250])
Epochs: 567, AvgLoss: 29.6863
torch.Size([1976, 250])
Epochs: 568, AvgLoss: 29.6850
torch.Size([1976, 250])
Epochs: 569, AvgLoss: 29.6841
torch.Size([1976, 250])
Epochs: 570, AvgLoss: 29.6830
torch.Size([1976, 250])
Epochs: 571, AvgLoss: 29.6819
torch.Size([1976, 250])
Epochs: 572, AvgLoss: 29.6802
torch.Size([1976, 250])
Epochs: 573, AvgLoss: 29.6785
torch.Size([1976, 250])
Epochs: 574, AvgLoss: 29.6772
torch.Size([1976, 250])
Epochs: 575, AvgLoss: 29.6757
torch.Size([1976, 250])
Epochs: 576, AvgLoss: 29.6749
torch.Size([1976, 250])
Epochs: 577, AvgLoss: 29.6736
torch.Size([1976, 250])
Epochs: 578, AvgLoss: 29.6723
torch.Size([1976, 250])
Epochs: 579, AvgLoss: 29.6709
torch.Size([1976, 250])
Epochs: 580, AvgLoss: 29.6697
torch.Size([1976, 250])
Epochs: 581, AvgLoss: 29.6684
torch.Size([1976, 250])
Epochs: 582, AvgLoss: 29.6671
torch.Size([1976, 250])
Epochs: 583, AvgLoss: 29.6657
torch.Size([1976, 250])
Epochs: 584, AvgLoss: 29.6643
torch.Size([1976, 250])
Epochs: 585, AvgLoss: 29.6625
torch.Size([1976, 250])
Epochs: 586, AvgLoss: 29.6616
torch.Size([1976, 250])
Epochs: 587, AvgLoss: 29.6600
torch.Size([1976, 250])
Epochs: 588, AvgLoss: 29.6586
torch.Size([1976, 250])
Epochs: 589, AvgLoss: 29.6574
torch.Size([1976, 250])
Epochs: 590, AvgLoss: 29.6562
torch.Size([1976, 250])
Epochs: 591, AvgLoss: 29.6552
torch.Size([1976, 250])
Epochs: 592, AvgLoss: 29.6535
torch.Size([1976, 250])
Epochs: 593, AvgLoss: 29.6519
torch.Size([1976, 250])
Epochs: 594, AvgLoss: 29.6508
torch.Size([1976, 250])
Epochs: 595, AvgLoss: 29.6492
torch.Size([1976, 250])
Epochs: 596, AvgLoss: 29.6484
torch.Size([1976, 250])
Epochs: 597, AvgLoss: 29.6469
torch.Size([1976, 250])
Epochs: 598, AvgLoss: 29.6456
torch.Size([1976, 250])
Epochs: 599, AvgLoss: 29.6446
torch.Size([1976, 250])
Epochs: 600, AvgLoss: 29.6428
Training for VAE has been done.
12.603759041056037
torch.Size([1976, 250])
(1976, 20)

Part 3: Perturbation

1. Gene perturbation

Perform in silico perturbation of individual genes to evaluate their causal impact on global gene expression programs. For each perturbed gene, quantify downstream effects on other genes and identify significantly affected genes based on the strength and consistency of the response. Save to gene_perturbation.csv file.

[8]:
Gene_Perturbation('PDAC_Control.csv','PDAC_Disease.csv','./dataset/PDAC_Control','./dataset/PDAC_Disease',graph = graph)

2. Drug-target perturbation

Perturb gene sets corresponding to known drug targets to simulate pharmacological interventions. Analyze how drug-target perturbations propagate through the gene network and identify genes and regulatory programs that are most sensitive to drug-induced effects. Save to drug_perturbation.csv

[9]:
Pathway_Drug_Perturbation('PDAC_Control.csv','PDAC_Disease.csv','./dataset/PDAC_Control','./dataset/PDAC_Disease', term_profile_path='./dataset/cmap_drug_target_genes.npy',out_csv='drug_perturbation.csv',graph = graph)

3. Pathway-level perturbation

Perturb entire biological pathways by jointly modulating all member genes. Measure coordinated downstream responses to assess pathway-level regulatory influence and enable systematic comparison of pathway perturbation effects across conditions. Save to pathway_perturbation.csv.

[10]:
Pathway_Drug_Perturbation('PDAC_Control.csv','PDAC_Disease.csv','./dataset/PDAC_Control','./dataset/PDAC_Disease', term_profile_path='./dataset/gesa_pathways.npy',out_csv='pathway_perturbation.csv',graph = graph)

Part 4: Survival Analysis

To assess the clinical relevance of genes identified by the perturbation analysis, we performed survival analysis using bulk transcriptomic data with matched patient outcomes. Patients were stratified into high- and low-risk groups based on quartiles of a composite gene expression score, and survival differences were evaluated using Kaplan–Meier analysis and the log-rank test.

[11]:
import pandas as pd
genes = pd.read_csv("gene_perturbation.csv", usecols=[0]).iloc[:, 0].tolist()
Survival('./dataset/PAAD_processed_bulk.csv',genes)
../_images/tutorial_scRNA-seq_PDAC_perturbation_19_0.png