diff --git a/ChannelNet_train.py b/ChannelNet_train.py deleted file mode 100644 index 3769413..0000000 --- a/ChannelNet_train.py +++ /dev/null @@ -1,42 +0,0 @@ -import numpy as np -import math -from models import interpolation , SRCNN_train , SRCNN_model, SRCNN_predict , DNCNN_train , DNCNN_model , DNCNN_predict -#from scipy.misc import imresize -from scipy.io import loadmat -import matplotlib.pyplot as plt - - - -if __name__ == "__main__": - # load datasets - channel_model = "VehA" - SNR = 22 - Number_of_pilots = 48 - perfect = loadmat("Perfect_"+ channel_model.mat')['My_perfect_H'] - noisy_input = loadmat("Noisy_" + channel_model + "_" + "SNR_" + str(SNR) + ".mat") [channel_model+"_noisy_"+ str(SNR)] - - interp_noisy = interpolation(noisy_input , SNR , Number_of_pilots , 'rbf') - - perfect_image = numpy.zeros((len(perfect),72,14,2)) - perfect_image[:,:,:,0] = numpy.real(perfect) - perfect_image[:,:,:,1] = numpy.imag(perfect) - perfect_image = numpy.concatenate((perfect_image[:,:,:,0], perfect_image[:,:,:,1]), axis=0).reshape(2*len(perfect), 72, 14, 1) - - - ####### ------ training SRCNN ------ ####### - idx_random = numpy.random.rand(len(perfect_image)) < (1/9) # uses 32000 from 36000 as training and the rest as validation - train_data, train_label = interp_noisy[idx_random,:,:,:] , perfect_image[idx_random,:,:,:] - val_data, val_label = interp_noisy[~idx_random,:,:,:] , perfect_image[~idx_random,:,:,:] - SRCNN_train(train_data ,train_label, val_data , val_label , channel_model , Number_of_pilots , SNR ) - - - ####### ------ prediction using SRCNN ------ ####### - srcnn_pred_train = SRCNN_predict(train_data, channel_model , num_pilots , SNR) - srcnn_pred_validation = SRCNN_predict(train_data, channel_model , num_pilots , SNR) - - - ####### ------ training DNCNN ------ ####### - DNCNN_train(input_data, channel_model , num_pilots , SNR): - - - diff --git a/README.md b/README.md index 7132db7..501b173 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,34 @@ -# ChannelNet -Implementation of the paper "Deep Learning-Based Channel Estimation" https://arxiv.org/abs/1810.05893 +# Deep Learning-Based Channel Estimation -# Abstract +## Introduction +This repo contains a deep learning (DL) algorithm for channel estimation in communication systems. And the aim is to find the unknown values of the channel response using some known values at the pilot locations. +The pipeline is based on [SRCNN](http://mmlab.ie.cuhk.edu.hk/projects/SRCNN.html) and [DNCNN](https://arxiv.org/abs/1608.03981). -In this paper, we present a deep learning (DL) algorithm for channel estimation in communication systems. We consider the time-frequency response of a fast fading communication channel as a two-dimensional image. The aim is to find the unknown values of the channel response using some known values at the pilot locations. To this end, a general pipeline using deep image processing techniques, image super-resolution (SR) and image restoration (IR) is proposed. This scheme considers the pilot values, altogether, as a low-resolution image and uses an SR network cascaded with a denoising IR network to estimate the channel. Moreover, an implementation of the proposed pipeline is presented. The estimation error shows that the presented algorithm is comparable to the minimum mean square error (MMSE) with full knowledge of the channel statistics and it is better than ALMMSE (an approximation to linear MMSE). The results confirm that this pipeline can be used efficiently in channel estimation. +- Full paper PDF: [Deep Learning-Based Channel Estimation](https://arxiv.org/abs/1810.05893) +- Authors: Mehran Soltani, Vahid Pourahmadi, Ali Mirzaei, Hamid Sheikhzadeh -# Datasets -links: -Perfect channels - VehA model (without noise): -https://drive.google.com/file/d/1H5GiEWITfM00R4BS2uC3SiBLR0EZKX8m/view?usp=sharing +## Requirements and Dependencies +- cuda10.0 && cudnn7.6.5 +- requirements.txt -Noisy channels (SNR = 12dB); -https://drive.google.com/file/d/1mwnfXalDUTebreMZqUNHRGAENAeJL1Nn/view?usp=sharing -Noisy channels (SNR = 22dB); -https://drive.google.com/file/d/1j0BcBoVKCDInryqfCRPjINAUrFrI_rxB/view?usp=sharing + +## Datasets + +- Perfect channels - [VehA model](https://drive.google.com/file/d/1H5GiEWITfM00R4BS2uC3SiBLR0EZKX8m/view?usp=sharing) (without noise): +- Noisy channels [(SNR = 12dB)](https://drive.google.com/file/d/1mwnfXalDUTebreMZqUNHRGAENAeJL1Nn/view?usp=sharing) +- Noisy channels [(SNR = 22dB)](https://drive.google.com/file/d/1j0BcBoVKCDInryqfCRPjINAUrFrI_rxB/view?usp=sharing) + +## BibTeX Citation +``` +@article{soltani2019deep, + title={Deep learning-based channel estimation}, + author={Soltani, Mehran and Pourahmadi, Vahid and Mirzaei, Ali and Sheikhzadeh, Hamid}, + journal={IEEE Communications Letters}, + volume={23}, + number={4}, + pages={652--655}, + year={2019}, + publisher={IEEE} +} +``` diff --git a/channelnet.ipynb b/channelnet.ipynb new file mode 100644 index 0000000..a65acef --- /dev/null +++ b/channelnet.ipynb @@ -0,0 +1,1485 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using TensorFlow backend.\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "import math\n", + "from models import interpolation, SRCNN_train, SRCNN_model, SRCNN_predict, DNCNN_train, DNCNN_model, DNCNN_predict\n", + "#from scipy.misc import imresize\n", + "from scipy.io import loadmat\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import os\n", + "os.path.isfile(\"../dataset/Perfect_H_40000.mat\") #\n", + "os.path.isfile(\"../dataset/My_noisy_H_22.mat\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# data:Perfect_H_40000.mat\n", + "# noisy: My_noisy_H_22.mat\n", + "if __name__ == \"__main__\":\n", + " # load datasets \n", + " channel_model = \"VehA\"\n", + " SNR = 22\n", + " Number_of_pilots = 48\n", + " perfect = loadmat(\"../dataset/Perfect_H_40000.mat\")['My_perfect_H']\n", + " noisy_input = loadmat(\"../dataset/My_noisy_H_22.mat\")['My_noisy_H']" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + " interp_noisy = interpolation(noisy_input , SNR , Number_of_pilots , 'rbf')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# interp_noisy = np.load(\"interp_noisy.npy\")\n", + "# np.save('interp_noisy.npy',interp_noisy)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "perfect_image = np.zeros((len(perfect),72,14,2))\n", + "perfect_image[:,:,:,0] = np.real(perfect)\n", + "perfect_image[:,:,:,1] = np.imag(perfect)\n", + "perfect_image = np.concatenate((perfect_image[:,:,:,0], perfect_image[:,:,:,1]), axis=0).reshape(2*len(perfect), 72, 14, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "####### ------ training SRCNN ------ #######\n", + "\n", + "idx_random = np.random.rand(len(perfect_image)) < (1/9) # uses 32000 from 36000 as training and the rest as validation\n", + "train_data, train_label = interp_noisy[idx_random,:,:,:] , perfect_image[idx_random,:,:,:]\n", + "val_data, val_label = interp_noisy[~idx_random,:,:,:] , perfect_image[~idx_random,:,:,:]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Num GPUs Available: 1\n" + ] + } + ], + "source": [ + "import tensorflow as tf\n", + "print(\"Num GPUs Available: \", len(tf.config.experimental.list_physical_devices('GPU')))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:From /root/anaconda3/envs/csi/lib/python3.6/site-packages/tensorflow_core/python/ops/resource_variable_ops.py:1630: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "If using Keras pass *_constraint arguments to layers.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/file/source/Channel-Estimation_test/models.py:98: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(64, (9, 9), activation=\"relu\", padding=\"same\", kernel_initializer=\"he_normal\")`\n", + " c2 = Convolution2D( 32 , 1 , 1 , activation = 'relu', init = 'he_normal', border_mode='same')(c1)\n", + "/home/file/source/Channel-Estimation_test/models.py:99: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(32, (1, 1), activation=\"relu\", padding=\"same\", kernel_initializer=\"he_normal\")`\n", + " c3 = Convolution2D( 1 , 5 , 5 , init = 'he_normal', border_mode='same')(c2)\n", + "/home/file/source/Channel-Estimation_test/models.py:100: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(1, (5, 5), padding=\"same\", kernel_initializer=\"he_normal\")`\n", + " #c4 = Input(shape = input_shape)(c3)\n", + "/home/file/source/Channel-Estimation_test/models.py:102: UserWarning: Update your `Model` call to the Keras 2 API: `Model(inputs=Tensor(\"in..., outputs=Tensor(\"co...)`\n", + " ##compile\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"model_1\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "input_1 (InputLayer) (None, 72, 14, 1) 0 \n", + "_________________________________________________________________\n", + "conv2d_1 (Conv2D) (None, 72, 14, 64) 5248 \n", + "_________________________________________________________________\n", + "conv2d_2 (Conv2D) (None, 72, 14, 32) 2080 \n", + "_________________________________________________________________\n", + "conv2d_3 (Conv2D) (None, 72, 14, 1) 801 \n", + "=================================================================\n", + "Total params: 8,129\n", + "Trainable params: 8,129\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n", + "None\n", + "WARNING:tensorflow:From /root/anaconda3/envs/csi/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:422: The name tf.global_variables is deprecated. Please use tf.compat.v1.global_variables instead.\n", + "\n", + "\n", + "Epoch 00001: val_loss improved from inf to 0.01143, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00002: val_loss improved from 0.01143 to 0.00551, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00003: val_loss improved from 0.00551 to 0.00436, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00004: val_loss improved from 0.00436 to 0.00370, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00005: val_loss improved from 0.00370 to 0.00331, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00006: val_loss improved from 0.00331 to 0.00307, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00007: val_loss improved from 0.00307 to 0.00297, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00008: val_loss improved from 0.00297 to 0.00277, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00009: val_loss improved from 0.00277 to 0.00261, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00010: val_loss improved from 0.00261 to 0.00251, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00011: val_loss did not improve from 0.00251\n", + "\n", + "Epoch 00012: val_loss improved from 0.00251 to 0.00235, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00013: val_loss improved from 0.00235 to 0.00230, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00014: val_loss did not improve from 0.00230\n", + "\n", + "Epoch 00015: val_loss improved from 0.00230 to 0.00223, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00016: val_loss improved from 0.00223 to 0.00218, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00017: val_loss improved from 0.00218 to 0.00216, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00018: val_loss improved from 0.00216 to 0.00209, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00019: val_loss did not improve from 0.00209\n", + "\n", + "Epoch 00020: val_loss improved from 0.00209 to 0.00207, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00021: val_loss improved from 0.00207 to 0.00203, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00022: val_loss did not improve from 0.00203\n", + "\n", + "Epoch 00023: val_loss did not improve from 0.00203\n", + "\n", + "Epoch 00024: val_loss did not improve from 0.00203\n", + "\n", + "Epoch 00025: val_loss did not improve from 0.00203\n", + "\n", + "Epoch 00026: val_loss improved from 0.00203 to 0.00193, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00027: val_loss did not improve from 0.00193\n", + "\n", + "Epoch 00028: val_loss did not improve from 0.00193\n", + "\n", + "Epoch 00029: val_loss did not improve from 0.00193\n", + "\n", + "Epoch 00030: val_loss did not improve from 0.00193\n", + "\n", + "Epoch 00031: val_loss did not improve from 0.00193\n", + "\n", + "Epoch 00032: val_loss did not improve from 0.00193\n", + "\n", + "Epoch 00033: val_loss did not improve from 0.00193\n", + "\n", + "Epoch 00034: val_loss improved from 0.00193 to 0.00186, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00035: val_loss improved from 0.00186 to 0.00182, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00036: val_loss did not improve from 0.00182\n", + "\n", + "Epoch 00037: val_loss did not improve from 0.00182\n", + "\n", + "Epoch 00038: val_loss did not improve from 0.00182\n", + "\n", + "Epoch 00039: val_loss did not improve from 0.00182\n", + "\n", + "Epoch 00040: val_loss did not improve from 0.00182\n", + "\n", + "Epoch 00041: val_loss improved from 0.00182 to 0.00172, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00042: val_loss did not improve from 0.00172\n", + "\n", + "Epoch 00043: val_loss did not improve from 0.00172\n", + "\n", + "Epoch 00044: val_loss did not improve from 0.00172\n", + "\n", + "Epoch 00045: val_loss did not improve from 0.00172\n", + "\n", + "Epoch 00046: val_loss did not improve from 0.00172\n", + "\n", + "Epoch 00047: val_loss did not improve from 0.00172\n", + "\n", + "Epoch 00048: val_loss improved from 0.00172 to 0.00168, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00049: val_loss did not improve from 0.00168\n", + "\n", + "Epoch 00050: val_loss did not improve from 0.00168\n", + "\n", + "Epoch 00051: val_loss did not improve from 0.00168\n", + "\n", + "Epoch 00052: val_loss improved from 0.00168 to 0.00168, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00053: val_loss did not improve from 0.00168\n", + "\n", + "Epoch 00054: val_loss did not improve from 0.00168\n", + "\n", + "Epoch 00055: val_loss did not improve from 0.00168\n", + "\n", + "Epoch 00056: val_loss did not improve from 0.00168\n", + "\n", + "Epoch 00057: val_loss did not improve from 0.00168\n", + "\n", + "Epoch 00058: val_loss improved from 0.00168 to 0.00167, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00059: val_loss improved from 0.00167 to 0.00166, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00060: val_loss improved from 0.00166 to 0.00162, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00061: val_loss did not improve from 0.00162\n", + "\n", + "Epoch 00062: val_loss improved from 0.00162 to 0.00161, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00063: val_loss did not improve from 0.00161\n", + "\n", + "Epoch 00064: val_loss did not improve from 0.00161\n", + "\n", + "Epoch 00065: val_loss did not improve from 0.00161\n", + "\n", + "Epoch 00066: val_loss did not improve from 0.00161\n", + "\n", + "Epoch 00067: val_loss did not improve from 0.00161\n", + "\n", + "Epoch 00068: val_loss did not improve from 0.00161\n", + "\n", + "Epoch 00069: val_loss did not improve from 0.00161\n", + "\n", + "Epoch 00070: val_loss did not improve from 0.00161\n", + "\n", + "Epoch 00071: val_loss improved from 0.00161 to 0.00158, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00072: val_loss did not improve from 0.00158\n", + "\n", + "Epoch 00073: val_loss did not improve from 0.00158\n", + "\n", + "Epoch 00074: val_loss did not improve from 0.00158\n", + "\n", + "Epoch 00075: val_loss did not improve from 0.00158\n", + "\n", + "Epoch 00076: val_loss did not improve from 0.00158\n", + "\n", + "Epoch 00077: val_loss did not improve from 0.00158\n", + "\n", + "Epoch 00078: val_loss improved from 0.00158 to 0.00157, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00079: val_loss did not improve from 0.00157\n", + "\n", + "Epoch 00080: val_loss improved from 0.00157 to 0.00154, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00081: val_loss did not improve from 0.00154\n", + "\n", + "Epoch 00082: val_loss did not improve from 0.00154\n", + "\n", + "Epoch 00083: val_loss did not improve from 0.00154\n", + "\n", + "Epoch 00084: val_loss did not improve from 0.00154\n", + "\n", + "Epoch 00085: val_loss improved from 0.00154 to 0.00153, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00086: val_loss did not improve from 0.00153\n", + "\n", + "Epoch 00087: val_loss did not improve from 0.00153\n", + "\n", + "Epoch 00088: val_loss did not improve from 0.00153\n", + "\n", + "Epoch 00089: val_loss did not improve from 0.00153\n", + "\n", + "Epoch 00090: val_loss did not improve from 0.00153\n", + "\n", + "Epoch 00091: val_loss did not improve from 0.00153\n", + "\n", + "Epoch 00092: val_loss did not improve from 0.00153\n", + "\n", + "Epoch 00093: val_loss did not improve from 0.00153\n", + "\n", + "Epoch 00094: val_loss improved from 0.00153 to 0.00152, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00095: val_loss did not improve from 0.00152\n", + "\n", + "Epoch 00096: val_loss did not improve from 0.00152\n", + "\n", + "Epoch 00097: val_loss did not improve from 0.00152\n", + "\n", + "Epoch 00098: val_loss improved from 0.00152 to 0.00151, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00099: val_loss did not improve from 0.00151\n", + "\n", + "Epoch 00100: val_loss improved from 0.00151 to 0.00150, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00101: val_loss did not improve from 0.00150\n", + "\n", + "Epoch 00102: val_loss did not improve from 0.00150\n", + "\n", + "Epoch 00103: val_loss did not improve from 0.00150\n", + "\n", + "Epoch 00104: val_loss did not improve from 0.00150\n", + "\n", + "Epoch 00105: val_loss did not improve from 0.00150\n", + "\n", + "Epoch 00106: val_loss did not improve from 0.00150\n", + "\n", + "Epoch 00107: val_loss improved from 0.00150 to 0.00147, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00108: val_loss did not improve from 0.00147\n", + "\n", + "Epoch 00109: val_loss did not improve from 0.00147\n", + "\n", + "Epoch 00110: val_loss did not improve from 0.00147\n", + "\n", + "Epoch 00111: val_loss improved from 0.00147 to 0.00147, saving model to SRCNN_check.h5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Epoch 00112: val_loss did not improve from 0.00147\n", + "\n", + "Epoch 00113: val_loss did not improve from 0.00147\n", + "\n", + "Epoch 00114: val_loss did not improve from 0.00147\n", + "\n", + "Epoch 00115: val_loss improved from 0.00147 to 0.00145, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00116: val_loss did not improve from 0.00145\n", + "\n", + "Epoch 00117: val_loss did not improve from 0.00145\n", + "\n", + "Epoch 00118: val_loss did not improve from 0.00145\n", + "\n", + "Epoch 00119: val_loss did not improve from 0.00145\n", + "\n", + "Epoch 00120: val_loss did not improve from 0.00145\n", + "\n", + "Epoch 00121: val_loss did not improve from 0.00145\n", + "\n", + "Epoch 00122: val_loss did not improve from 0.00145\n", + "\n", + "Epoch 00123: val_loss did not improve from 0.00145\n", + "\n", + "Epoch 00124: val_loss did not improve from 0.00145\n", + "\n", + "Epoch 00125: val_loss did not improve from 0.00145\n", + "\n", + "Epoch 00126: val_loss did not improve from 0.00145\n", + "\n", + "Epoch 00127: val_loss did not improve from 0.00145\n", + "\n", + "Epoch 00128: val_loss did not improve from 0.00145\n", + "\n", + "Epoch 00129: val_loss did not improve from 0.00145\n", + "\n", + "Epoch 00130: val_loss improved from 0.00145 to 0.00145, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00131: val_loss did not improve from 0.00145\n", + "\n", + "Epoch 00132: val_loss did not improve from 0.00145\n", + "\n", + "Epoch 00133: val_loss did not improve from 0.00145\n", + "\n", + "Epoch 00134: val_loss improved from 0.00145 to 0.00144, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00135: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00136: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00137: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00138: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00139: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00140: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00141: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00142: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00143: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00144: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00145: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00146: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00147: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00148: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00149: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00150: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00151: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00152: val_loss improved from 0.00144 to 0.00144, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00153: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00154: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00155: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00156: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00157: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00158: val_loss did not improve from 0.00144\n", + "\n", + "Epoch 00159: val_loss improved from 0.00144 to 0.00142, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00160: val_loss did not improve from 0.00142\n", + "\n", + "Epoch 00161: val_loss did not improve from 0.00142\n", + "\n", + "Epoch 00162: val_loss did not improve from 0.00142\n", + "\n", + "Epoch 00163: val_loss improved from 0.00142 to 0.00141, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00164: val_loss did not improve from 0.00141\n", + "\n", + "Epoch 00165: val_loss did not improve from 0.00141\n", + "\n", + "Epoch 00166: val_loss did not improve from 0.00141\n", + "\n", + "Epoch 00167: val_loss improved from 0.00141 to 0.00140, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00168: val_loss did not improve from 0.00140\n", + "\n", + "Epoch 00169: val_loss did not improve from 0.00140\n", + "\n", + "Epoch 00170: val_loss did not improve from 0.00140\n", + "\n", + "Epoch 00171: val_loss did not improve from 0.00140\n", + "\n", + "Epoch 00172: val_loss did not improve from 0.00140\n", + "\n", + "Epoch 00173: val_loss did not improve from 0.00140\n", + "\n", + "Epoch 00174: val_loss did not improve from 0.00140\n", + "\n", + "Epoch 00175: val_loss did not improve from 0.00140\n", + "\n", + "Epoch 00176: val_loss did not improve from 0.00140\n", + "\n", + "Epoch 00177: val_loss did not improve from 0.00140\n", + "\n", + "Epoch 00178: val_loss improved from 0.00140 to 0.00138, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00179: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00180: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00181: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00182: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00183: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00184: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00185: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00186: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00187: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00188: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00189: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00190: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00191: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00192: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00193: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00194: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00195: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00196: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00197: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00198: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00199: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00200: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00201: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00202: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00203: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00204: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00205: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00206: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00207: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00208: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00209: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00210: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00211: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00212: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00213: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00214: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00215: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00216: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00217: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00218: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00219: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00220: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00221: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00222: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00223: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00224: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00225: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00226: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00227: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00228: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00229: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00230: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00231: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00232: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00233: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00234: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00235: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00236: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00237: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00238: val_loss did not improve from 0.00138\n", + "\n", + "Epoch 00239: val_loss improved from 0.00138 to 0.00134, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00240: val_loss did not improve from 0.00134\n", + "\n", + "Epoch 00241: val_loss did not improve from 0.00134\n", + "\n", + "Epoch 00242: val_loss did not improve from 0.00134\n", + "\n", + "Epoch 00243: val_loss did not improve from 0.00134\n", + "\n", + "Epoch 00244: val_loss did not improve from 0.00134\n", + "\n", + "Epoch 00245: val_loss did not improve from 0.00134\n", + "\n", + "Epoch 00246: val_loss did not improve from 0.00134\n", + "\n", + "Epoch 00247: val_loss did not improve from 0.00134\n", + "\n", + "Epoch 00248: val_loss did not improve from 0.00134\n", + "\n", + "Epoch 00249: val_loss did not improve from 0.00134\n", + "\n", + "Epoch 00250: val_loss improved from 0.00134 to 0.00133, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00251: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00252: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00253: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00254: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00255: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00256: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00257: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00258: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00259: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00260: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00261: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00262: val_loss did not improve from 0.00133\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Epoch 00263: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00264: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00265: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00266: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00267: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00268: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00269: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00270: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00271: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00272: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00273: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00274: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00275: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00276: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00277: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00278: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00279: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00280: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00281: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00282: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00283: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00284: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00285: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00286: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00287: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00288: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00289: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00290: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00291: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00292: val_loss improved from 0.00133 to 0.00133, saving model to SRCNN_check.h5\n", + "\n", + "Epoch 00293: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00294: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00295: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00296: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00297: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00298: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00299: val_loss did not improve from 0.00133\n", + "\n", + "Epoch 00300: val_loss did not improve from 0.00133\n" + ] + } + ], + "source": [ + "# SRCNN_train(train_data ,train_label, val_data , val_label , channel_model , Number_of_pilots , SNR )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After training 300 epochs, the val_loss improved from inf to 0.00133, saving model to SRCNN_VehA_48_22.h5." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:From /root/anaconda3/envs/csi/lib/python3.6/site-packages/tensorflow_core/python/ops/resource_variable_ops.py:1630: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "If using Keras pass *_constraint arguments to layers.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/file/source/Channel-Estimation_test/models.py:97: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(64, (9, 9), activation=\"relu\", padding=\"same\", kernel_initializer=\"he_normal\")`\n", + " c1 = Convolution2D( 64 , 9 , 9 , activation = 'relu', init = 'he_normal', border_mode='same')(x)\n", + "/home/file/source/Channel-Estimation_test/models.py:98: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(32, (1, 1), activation=\"relu\", padding=\"same\", kernel_initializer=\"he_normal\")`\n", + " c2 = Convolution2D( 32 , 1 , 1 , activation = 'relu', init = 'he_normal', border_mode='same')(c1)\n", + "/home/file/source/Channel-Estimation_test/models.py:99: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(1, (5, 5), padding=\"same\", kernel_initializer=\"he_normal\")`\n", + " c3 = Convolution2D( 1 , 5 , 5 , init = 'he_normal', border_mode='same')(c2)\n", + "/home/file/source/Channel-Estimation_test/models.py:101: UserWarning: Update your `Model` call to the Keras 2 API: `Model(inputs=Tensor(\"in..., outputs=Tensor(\"co...)`\n", + " model = Model(input = x, output = c3)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:From /root/anaconda3/envs/csi/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:422: The name tf.global_variables is deprecated. Please use tf.compat.v1.global_variables instead.\n", + "\n" + ] + } + ], + "source": [ + "####### ------ prediction using SRCNN ------ #######\n", + "srcnn_pred_train = SRCNN_predict(train_data, channel_model , Number_of_pilots , SNR) " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + " srcnn_pred_validation = SRCNN_predict(val_data, channel_model , Number_of_pilots , SNR)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(8872, 72, 14, 1)\n" + ] + } + ], + "source": [ + "print(srcnn_pred_train.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "# save the result of prediction\n", + "np.savetxt('srcnn_pred_train.txt',srcnn_pred_train[0][0])\n", + "np.savetxt('srcnn_pred_validation.txt',srcnn_pred_validation[0][0])" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"model_3\"\n", + "__________________________________________________________________________________________________\n", + "Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + "input_3 (InputLayer) (None, None, None, 1 0 \n", + "__________________________________________________________________________________________________\n", + "conv2d_7 (Conv2D) (None, None, None, 6 640 input_3[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_1 (Activation) (None, None, None, 6 0 conv2d_7[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_8 (Conv2D) (None, None, None, 6 36928 activation_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_1 (BatchNor (None, None, None, 6 256 conv2d_8[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_2 (Activation) (None, None, None, 6 0 batch_normalization_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_9 (Conv2D) (None, None, None, 6 36928 activation_2[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_2 (BatchNor (None, None, None, 6 256 conv2d_9[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_3 (Activation) (None, None, None, 6 0 batch_normalization_2[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_10 (Conv2D) (None, None, None, 6 36928 activation_3[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_3 (BatchNor (None, None, None, 6 256 conv2d_10[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_4 (Activation) (None, None, None, 6 0 batch_normalization_3[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_11 (Conv2D) (None, None, None, 6 36928 activation_4[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_4 (BatchNor (None, None, None, 6 256 conv2d_11[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_5 (Activation) (None, None, None, 6 0 batch_normalization_4[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_12 (Conv2D) (None, None, None, 6 36928 activation_5[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_5 (BatchNor (None, None, None, 6 256 conv2d_12[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_6 (Activation) (None, None, None, 6 0 batch_normalization_5[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_13 (Conv2D) (None, None, None, 6 36928 activation_6[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_6 (BatchNor (None, None, None, 6 256 conv2d_13[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_7 (Activation) (None, None, None, 6 0 batch_normalization_6[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_14 (Conv2D) (None, None, None, 6 36928 activation_7[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_7 (BatchNor (None, None, None, 6 256 conv2d_14[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_8 (Activation) (None, None, None, 6 0 batch_normalization_7[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_15 (Conv2D) (None, None, None, 6 36928 activation_8[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_8 (BatchNor (None, None, None, 6 256 conv2d_15[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_9 (Activation) (None, None, None, 6 0 batch_normalization_8[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_16 (Conv2D) (None, None, None, 6 36928 activation_9[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_9 (BatchNor (None, None, None, 6 256 conv2d_16[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_10 (Activation) (None, None, None, 6 0 batch_normalization_9[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_17 (Conv2D) (None, None, None, 6 36928 activation_10[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_10 (BatchNo (None, None, None, 6 256 conv2d_17[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_11 (Activation) (None, None, None, 6 0 batch_normalization_10[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_18 (Conv2D) (None, None, None, 6 36928 activation_11[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_11 (BatchNo (None, None, None, 6 256 conv2d_18[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_12 (Activation) (None, None, None, 6 0 batch_normalization_11[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_19 (Conv2D) (None, None, None, 6 36928 activation_12[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_12 (BatchNo (None, None, None, 6 256 conv2d_19[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_13 (Activation) (None, None, None, 6 0 batch_normalization_12[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_20 (Conv2D) (None, None, None, 6 36928 activation_13[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_13 (BatchNo (None, None, None, 6 256 conv2d_20[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_14 (Activation) (None, None, None, 6 0 batch_normalization_13[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_21 (Conv2D) (None, None, None, 6 36928 activation_14[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_14 (BatchNo (None, None, None, 6 256 conv2d_21[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_15 (Activation) (None, None, None, 6 0 batch_normalization_14[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_22 (Conv2D) (None, None, None, 6 36928 activation_15[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_15 (BatchNo (None, None, None, 6 256 conv2d_22[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_16 (Activation) (None, None, None, 6 0 batch_normalization_15[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_23 (Conv2D) (None, None, None, 6 36928 activation_16[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_16 (BatchNo (None, None, None, 6 256 conv2d_23[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_17 (Activation) (None, None, None, 6 0 batch_normalization_16[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_24 (Conv2D) (None, None, None, 6 36928 activation_17[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_17 (BatchNo (None, None, None, 6 256 conv2d_24[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_18 (Activation) (None, None, None, 6 0 batch_normalization_17[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_25 (Conv2D) (None, None, None, 6 36928 activation_18[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_18 (BatchNo (None, None, None, 6 256 conv2d_25[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_19 (Activation) (None, None, None, 6 0 batch_normalization_18[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_26 (Conv2D) (None, None, None, 1 577 activation_19[0][0] \n", + "__________________________________________________________________________________________________\n", + "subtract_1 (Subtract) (None, None, None, 1 0 input_3[0][0] \n", + " conv2d_26[0][0] \n", + "==================================================================================================\n", + "Total params: 670,529\n", + "Trainable params: 668,225\n", + "Non-trainable params: 2,304\n", + "__________________________________________________________________________________________________\n", + "None\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Epoch 00001: val_loss improved from inf to 0.00935, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00002: val_loss improved from 0.00935 to 0.00865, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00003: val_loss improved from 0.00865 to 0.00743, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00004: val_loss improved from 0.00743 to 0.00638, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00005: val_loss improved from 0.00638 to 0.00494, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00006: val_loss improved from 0.00494 to 0.00368, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00007: val_loss improved from 0.00368 to 0.00336, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00008: val_loss improved from 0.00336 to 0.00220, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00009: val_loss improved from 0.00220 to 0.00194, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00010: val_loss improved from 0.00194 to 0.00177, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00011: val_loss improved from 0.00177 to 0.00164, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00012: val_loss did not improve from 0.00164\n", + "\n", + "Epoch 00013: val_loss did not improve from 0.00164\n", + "\n", + "Epoch 00014: val_loss improved from 0.00164 to 0.00153, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00015: val_loss did not improve from 0.00153\n", + "\n", + "Epoch 00016: val_loss did not improve from 0.00153\n", + "\n", + "Epoch 00017: val_loss improved from 0.00153 to 0.00149, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00018: val_loss improved from 0.00149 to 0.00130, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00019: val_loss did not improve from 0.00130\n", + "\n", + "Epoch 00020: val_loss did not improve from 0.00130\n", + "\n", + "Epoch 00021: val_loss did not improve from 0.00130\n", + "\n", + "Epoch 00022: val_loss did not improve from 0.00130\n", + "\n", + "Epoch 00023: val_loss did not improve from 0.00130\n", + "\n", + "Epoch 00024: val_loss did not improve from 0.00130\n", + "\n", + "Epoch 00025: val_loss did not improve from 0.00130\n", + "\n", + "Epoch 00026: val_loss did not improve from 0.00130\n", + "\n", + "Epoch 00027: val_loss did not improve from 0.00130\n", + "\n", + "Epoch 00028: val_loss improved from 0.00130 to 0.00129, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00029: val_loss did not improve from 0.00129\n", + "\n", + "Epoch 00030: val_loss improved from 0.00129 to 0.00122, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00031: val_loss did not improve from 0.00122\n", + "\n", + "Epoch 00032: val_loss did not improve from 0.00122\n", + "\n", + "Epoch 00033: val_loss improved from 0.00122 to 0.00122, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00034: val_loss did not improve from 0.00122\n", + "\n", + "Epoch 00035: val_loss did not improve from 0.00122\n", + "\n", + "Epoch 00036: val_loss did not improve from 0.00122\n", + "\n", + "Epoch 00037: val_loss improved from 0.00122 to 0.00119, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00038: val_loss improved from 0.00119 to 0.00118, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00039: val_loss did not improve from 0.00118\n", + "\n", + "Epoch 00040: val_loss did not improve from 0.00118\n", + "\n", + "Epoch 00041: val_loss did not improve from 0.00118\n", + "\n", + "Epoch 00042: val_loss did not improve from 0.00118\n", + "\n", + "Epoch 00043: val_loss did not improve from 0.00118\n", + "\n", + "Epoch 00044: val_loss did not improve from 0.00118\n", + "\n", + "Epoch 00045: val_loss did not improve from 0.00118\n", + "\n", + "Epoch 00046: val_loss did not improve from 0.00118\n", + "\n", + "Epoch 00047: val_loss did not improve from 0.00118\n", + "\n", + "Epoch 00048: val_loss improved from 0.00118 to 0.00112, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00049: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00050: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00051: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00052: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00053: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00054: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00055: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00056: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00057: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00058: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00059: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00060: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00061: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00062: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00063: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00064: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00065: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00066: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00067: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00068: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00069: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00070: val_loss did not improve from 0.00112\n", + "\n", + "Epoch 00071: val_loss improved from 0.00112 to 0.00111, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00072: val_loss did not improve from 0.00111\n", + "\n", + "Epoch 00073: val_loss did not improve from 0.00111\n", + "\n", + "Epoch 00074: val_loss did not improve from 0.00111\n", + "\n", + "Epoch 00075: val_loss did not improve from 0.00111\n", + "\n", + "Epoch 00076: val_loss did not improve from 0.00111\n", + "\n", + "Epoch 00077: val_loss did not improve from 0.00111\n", + "\n", + "Epoch 00078: val_loss did not improve from 0.00111\n", + "\n", + "Epoch 00079: val_loss did not improve from 0.00111\n", + "\n", + "Epoch 00080: val_loss improved from 0.00111 to 0.00107, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00081: val_loss did not improve from 0.00107\n", + "\n", + "Epoch 00082: val_loss did not improve from 0.00107\n", + "\n", + "Epoch 00083: val_loss did not improve from 0.00107\n", + "\n", + "Epoch 00084: val_loss improved from 0.00107 to 0.00106, saving model to DNCNN_check.h5\n", + "\n", + "Epoch 00085: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00086: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00087: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00088: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00089: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00090: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00091: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00092: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00093: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00094: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00095: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00096: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00097: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00098: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00099: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00100: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00101: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00102: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00103: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00104: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00105: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00106: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00107: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00108: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00109: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00110: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00111: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00112: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00113: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00114: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00115: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00116: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00117: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00118: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00119: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00120: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00121: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00122: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00123: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00124: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00125: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00126: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00127: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00128: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00129: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00130: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00131: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00132: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00133: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00134: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00135: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00136: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00137: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00138: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00139: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00140: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00141: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00142: val_loss did not improve from 0.00106\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Epoch 00143: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00144: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00145: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00146: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00147: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00148: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00149: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00150: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00151: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00152: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00153: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00154: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00155: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00156: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00157: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00158: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00159: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00160: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00161: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00162: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00163: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00164: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00165: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00166: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00167: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00168: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00169: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00170: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00171: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00172: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00173: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00174: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00175: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00176: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00177: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00178: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00179: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00180: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00181: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00182: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00183: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00184: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00185: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00186: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00187: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00188: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00189: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00190: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00191: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00192: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00193: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00194: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00195: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00196: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00197: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00198: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00199: val_loss did not improve from 0.00106\n", + "\n", + "Epoch 00200: val_loss did not improve from 0.00106\n" + ] + } + ], + "source": [ + "####### ------ training DNCNN ------ #######\n", + "DNCNN_train(train_data ,train_label, val_data , val_label , channel_model , Number_of_pilots , SNR )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "After training 200 epochs, the val_loss improved from 0.0935 to 0.00106, saving model to DNCNN_VehA_48_22.h5." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "`" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/models.py b/models.py index d0a6bd3..e2d9af0 100644 --- a/models.py +++ b/models.py @@ -14,6 +14,8 @@ import math from scipy import interpolate #from scipy.misc import imresize +import os +from tqdm import tqdm def psnr(target, ref): @@ -28,7 +30,8 @@ def psnr(target, ref): return 20 * math.log10(255. / rmse) -def interpolation(noisy , SNR , Number_of_pilot , interp) +def interpolation(noisy, SNR, Number_of_pilot, interp): + print("start!") noisy_image = np.zeros((40000,72,14,2)) noisy_image[:,:,:,0] = np.real(noisy) @@ -53,9 +56,10 @@ def interpolation(noisy , SNR , Number_of_pilot , interp) - interp_noisy = np.zeros((40000,72,14,2)) - + interp_noisy = np.zeros((40000,72,14,2)) + pbar = tqdm(total=len(noisy)) for i in range(len(noisy)): + pbar.update(1) z = [noisy_image[i,j,k,0] for j,k in zip(r,c)] if(interp == 'rbf'): f = interpolate.Rbf(np.array(r).astype(float), np.array(c).astype(float), z,function='gaussian') @@ -76,11 +80,9 @@ def interpolation(noisy , SNR , Number_of_pilot , interp) tck = interpolate.bisplrep(np.array(r).astype(float), np.array(c).astype(float), z) z_intp = interpolate.bisplev(range(72),range(14),tck) interp_noisy[i,:,:,1] = z_intp + pbar.close() - - interp_noisy = np.concatenate((interp_noisy[:,:,:,0], interp_noisy[:,:,:,1]), axis=0).reshape(80000, 72, 14, 1) - - + interp_noisy = np.concatenate((interp_noisy[:,:,:,0], interp_noisy[:,:,:,1]), axis=0).reshape(80000, 72, 14, 1) return interp_noisy def SRCNN_model(): @@ -100,7 +102,6 @@ def SRCNN_model(): def SRCNN_train(train_data ,train_label, val_data , val_label , channel_model , num_pilots , SNR ): srcnn_model = SRCNN_model() print(srcnn_model.summary()) - checkpoint = ModelCheckpoint("SRCNN_check.h5", monitor='val_loss', verbose=1, save_best_only=True, save_weights_only=False, mode='min') callbacks_list = [checkpoint] @@ -122,7 +123,7 @@ def SRCNN_predict(input_data , channel_model , num_pilots , SNR): def DNCNN_model (): - inpt = Input(shape=(None,None,1)) + inpt = Input(shape=(None,None,1)) # (72,14,1) # 1st layer, Conv+relu x = Conv2D(filters=64, kernel_size=(3,3), strides=(1,1), padding='same')(inpt) x = Activation('relu')(x) @@ -130,13 +131,13 @@ def DNCNN_model (): for i in range(18): x = Conv2D(filters=64, kernel_size=(3,3), strides=(1,1), padding='same')(x) x = BatchNormalization(axis=-1, epsilon=1e-3)(x) - x = Activation('relu')(x) + x = Activation('relu')(x) # last layer, Conv x = Conv2D(filters=1, kernel_size=(3,3), strides=(1,1), padding='same')(x) x = Subtract()([inpt, x]) # input - noise model = Model(inputs=inpt, outputs=x) - adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-8) - model.compile(optimizer=adam, loss='mean_squared_error', metrics=['mean_squared_error']) + adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-8) + model.compile(optimizer=adam, loss='mean_squared_error', metrics=['mean_squared_error']) return model def DNCNN_train(train_data ,train_label, val_data , val_label, channel_model , num_pilots , SNR ): diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..47925e2 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,87 @@ +absl-py==0.13.0 +argon2-cffi==20.1.0 +astor==0.8.1 +async-generator==1.10 +attrs==21.2.0 +backcall==0.2.0 +bleach==3.3.0 +cached-property==1.5.2 +certifi==2021.5.30 +cffi==1.14.5 +cycler==0.10.0 +dataclasses==0.8 +decorator==5.0.9 +defusedxml==0.7.1 +entrypoints==0.3 +gast==0.2.2 +google-pasta==0.2.0 +grpcio==1.38.0 +h5py==2.10.0 +importlib-metadata==4.5.0 +ipykernel==5.5.5 +ipython==7.16.1 +ipython-genutils==0.2.0 +ipywidgets==7.6.3 +jedi==0.18.0 +Jinja2==3.0.1 +jsonschema==3.2.0 +jupyter==1.0.0 +jupyter-client==6.2.0 +jupyter-console==6.4.0 +jupyter-core==4.7.1 +jupyterlab-pygments==0.1.2 +jupyterlab-widgets==1.0.0 +Keras==2.3.0 +Keras-Applications==1.0.8 +Keras-Preprocessing==1.1.2 +kiwisolver==1.3.1 +Markdown==3.3.4 +MarkupSafe==2.0.1 +matplotlib==3.3.4 +mistune==0.8.4 +nbclient==0.5.3 +nbconvert==6.0.7 +nbformat==5.1.3 +nest-asyncio==1.5.1 +notebook==6.4.0 +numpy==1.19.5 +opt-einsum==3.3.0 +packaging==20.9 +pandocfilters==1.4.3 +parso==0.8.2 +pexpect==4.8.0 +pickleshare==0.7.5 +Pillow==8.2.0 +prometheus-client==0.11.0 +prompt-toolkit==3.0.19 +protobuf==3.17.3 +ptyprocess==0.7.0 +pycparser==2.20 +Pygments==2.9.0 +pyparsing==2.4.7 +pyrsistent==0.17.3 +python-dateutil==2.8.1 +PyYAML==5.4.1 +pyzmq==22.1.0 +qtconsole==5.1.0 +QtPy==1.9.0 +scipy==1.5.4 +Send2Trash==1.5.0 +six==1.16.0 +some-package==0.1 +tensorboard==1.15.0 +tensorflow-estimator==1.15.1 +tensorflow-gpu==1.15.0 +termcolor==1.1.0 +terminado==0.10.1 +testpath==0.5.0 +tornado==6.1 +tqdm==4.61.1 +traitlets==4.3.3 +typing-extensions==3.10.0.0 +wcwidth==0.2.5 +webencodings==0.5.1 +Werkzeug==2.0.1 +widgetsnbextension==3.5.1 +wrapt==1.12.1 +zipp==3.4.1