In [ ]:
# !pip install -U pandas
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
In [ ]:
from google.colab import drive
drive.mount('/content/drive', force_remount=True)
Mounted at /content/drive
In [ ]:
!pip3 install pickle5
import pickle5 as pickle
# with open("/content/drive/MyDrive/Speech Recognition/mfcc.pickle", "rb") as fh:
#   data = pickle.load(fh)
# data.to_pickle("p4")
# df = pd.read_pickle("p4")

with open("/content/drive/MyDrive/Speech Recognition/noisy.pickle", "rb") as fh:
  data = pickle.load(fh)
# data = pickle.load(open("/content/drive/MyDrive/Speech Recognition/noisy.pickle", "rb"))
data.to_pickle("p4")
df = pd.read_pickle("p4")
Collecting pickle5
  Downloading https://files.pythonhosted.org/packages/f7/4c/5c4dd0462c8d3a6bc4af500a6af240763c2ebd1efdc736fc2c946d44b70a/pickle5-0.0.11.tar.gz (132kB)
     |████████████████████████████████| 133kB 8.4MB/s eta 0:00:01
Building wheels for collected packages: pickle5
  Building wheel for pickle5 (setup.py) ... done
  Created wheel for pickle5: filename=pickle5-0.0.11-cp37-cp37m-linux_x86_64.whl size=219265 sha256=43ffec2706d353e6db7d70ca4fbbcd0540d2693b60a92e0d347a8307ebea4d65
  Stored in directory: /root/.cache/pip/wheels/a6/90/95/f889ca4aa8b0e0c7f21c8470b6f5d6032f0390a3a141a9a3bd
Successfully built pickle5
Installing collected packages: pickle5
Successfully installed pickle5-0.0.11
In [ ]:
# a = df['mfcc'][0].replace(' ',',').replace('\n','')
# b = np.fromstring(a, sep=',')
# b
In [ ]:
!python --version
In [ ]:
y = df['word']
X = df['mfcc']
In [ ]:
for i in range(len(X)):
    
    if X[i].shape == (32,32): 
#         a = m
        np.asarray(X[i]).astype(np.float32)
    else:
#         print(X[i].shape)
        a = np.empty([32,32])
        f1 = X[i].shape[0]
        f2 = X[i].shape[1]
#         print(f1,f2)
        a[:f1,:f2]=X[i]
        X[i] = np.asarray(a).astype(np.float32)
In [ ]:
X = np.dstack(X).T
print(X.shape,len(X))
from keras.layers import Normalization
layer = Normalization(mean=0., variance=1.)
X = layer(X)
(47348, 32, 32) 47348
In [ ]:
print(len(X))
a = 0
for m in X:
    if m.shape != (32,32):
#         print(m.shape)
        a = a+1
print(a)
47348
0
In [ ]:
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Dropout
from keras.layers import Lambda
from keras.layers import Input
from keras.layers import GRU


import keras
In [ ]:

In [ ]:
from sklearn.preprocessing import LabelBinarizer
In [ ]:
lb = LabelBinarizer()
lbFit = lb.fit_transform(y)
lbFit.shape
Out[ ]:
(47348, 20)
In [ ]:
X_train, X_test, y_train, y_test = train_test_split(np.asarray(X),lbFit,random_state = 42, test_size = 0.15)
In [ ]:
n_timesteps, n_features, n_outputs = X_train.shape[1], X_train.shape[2], y_train.shape[1]
print(n_timesteps, n_features, n_outputs)
32 32 20
In [ ]:
# import tensorflow as tf
# sess = tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(log_device_placement=True))
In [ ]:
# from keras import backend as K
# K.tensorflow_backend._get_available_gpus()
In [ ]:
model = Sequential()
model.add(LSTM(1024, input_shape=(n_timesteps,n_features)))
model.add(Dropout(0.2))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(n_outputs, activation='softmax'))
opt = keras.optimizers.Adam(learning_rate=0.00025)
model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])
In [ ]:
model.fit(X_train, y_train, epochs=128, batch_size=128, verbose=2)
Epoch 1/128
315/315 - 31s - loss: 3.0059 - accuracy: 0.0511
Epoch 2/128
315/315 - 10s - loss: 2.9981 - accuracy: 0.0528
Epoch 3/128
315/315 - 10s - loss: 2.9962 - accuracy: 0.0526
Epoch 4/128
315/315 - 10s - loss: 2.8437 - accuracy: 0.0860
Epoch 5/128
315/315 - 10s - loss: 2.5564 - accuracy: 0.1319
Epoch 6/128
315/315 - 10s - loss: 2.3745 - accuracy: 0.1941
Epoch 7/128
315/315 - 10s - loss: 2.2126 - accuracy: 0.2461
Epoch 8/128
315/315 - 10s - loss: 2.0564 - accuracy: 0.3010
Epoch 9/128
315/315 - 10s - loss: 1.8008 - accuracy: 0.4046
Epoch 10/128
315/315 - 11s - loss: 1.5631 - accuracy: 0.4830
Epoch 11/128
315/315 - 11s - loss: 1.4119 - accuracy: 0.5375
Epoch 12/128
315/315 - 11s - loss: 1.2772 - accuracy: 0.5845
Epoch 13/128
315/315 - 11s - loss: 1.1781 - accuracy: 0.6226
Epoch 14/128
315/315 - 11s - loss: 1.0856 - accuracy: 0.6553
Epoch 15/128
315/315 - 11s - loss: 0.9995 - accuracy: 0.6836
Epoch 16/128
315/315 - 11s - loss: 0.9410 - accuracy: 0.7035
Epoch 17/128
315/315 - 11s - loss: 0.8885 - accuracy: 0.7203
Epoch 18/128
315/315 - 11s - loss: 0.8475 - accuracy: 0.7333
Epoch 19/128
315/315 - 11s - loss: 0.8123 - accuracy: 0.7467
Epoch 20/128
315/315 - 11s - loss: 0.7727 - accuracy: 0.7568
Epoch 21/128
315/315 - 11s - loss: 0.7516 - accuracy: 0.7652
Epoch 22/128
315/315 - 11s - loss: 0.7296 - accuracy: 0.7718
Epoch 23/128
315/315 - 11s - loss: 0.7095 - accuracy: 0.7763
Epoch 24/128
315/315 - 11s - loss: 0.6897 - accuracy: 0.7858
Epoch 25/128
315/315 - 11s - loss: 0.6704 - accuracy: 0.7900
Epoch 26/128
315/315 - 11s - loss: 0.6449 - accuracy: 0.7972
Epoch 27/128
315/315 - 11s - loss: 0.6311 - accuracy: 0.8021
Epoch 28/128
315/315 - 11s - loss: 0.6163 - accuracy: 0.8060
Epoch 29/128
315/315 - 11s - loss: 0.6016 - accuracy: 0.8130
Epoch 30/128
315/315 - 11s - loss: 0.5832 - accuracy: 0.8157
Epoch 31/128
315/315 - 11s - loss: 0.5747 - accuracy: 0.8210
Epoch 32/128
315/315 - 11s - loss: 0.5606 - accuracy: 0.8236
Epoch 33/128
315/315 - 11s - loss: 0.5441 - accuracy: 0.8294
Epoch 34/128
315/315 - 11s - loss: 0.5405 - accuracy: 0.8282
Epoch 35/128
315/315 - 11s - loss: 0.5239 - accuracy: 0.8350
Epoch 36/128
315/315 - 11s - loss: 0.5149 - accuracy: 0.8379
Epoch 37/128
315/315 - 11s - loss: 0.5011 - accuracy: 0.8424
Epoch 38/128
315/315 - 11s - loss: 0.4917 - accuracy: 0.8456
Epoch 39/128
315/315 - 11s - loss: 0.4897 - accuracy: 0.8468
Epoch 40/128
315/315 - 11s - loss: 0.4778 - accuracy: 0.8475
Epoch 41/128
315/315 - 11s - loss: 0.4657 - accuracy: 0.8523
Epoch 42/128
315/315 - 11s - loss: 0.4545 - accuracy: 0.8556
Epoch 43/128
315/315 - 11s - loss: 0.4448 - accuracy: 0.8591
Epoch 44/128
315/315 - 11s - loss: 0.4341 - accuracy: 0.8627
Epoch 45/128
315/315 - 11s - loss: 0.4318 - accuracy: 0.8639
Epoch 46/128
315/315 - 11s - loss: 0.4236 - accuracy: 0.8647
Epoch 47/128
315/315 - 11s - loss: 0.4106 - accuracy: 0.8694
Epoch 48/128
315/315 - 11s - loss: 0.3979 - accuracy: 0.8734
Epoch 49/128
315/315 - 11s - loss: 0.4020 - accuracy: 0.8731
Epoch 50/128
315/315 - 11s - loss: 0.3931 - accuracy: 0.8724
Epoch 51/128
315/315 - 11s - loss: 0.3790 - accuracy: 0.8799
Epoch 52/128
315/315 - 11s - loss: 0.3713 - accuracy: 0.8810
Epoch 53/128
315/315 - 11s - loss: 0.3677 - accuracy: 0.8843
Epoch 54/128
315/315 - 11s - loss: 0.3608 - accuracy: 0.8847
Epoch 55/128
315/315 - 11s - loss: 0.3485 - accuracy: 0.8893
Epoch 56/128
315/315 - 11s - loss: 0.3486 - accuracy: 0.8883
Epoch 57/128
315/315 - 11s - loss: 0.3422 - accuracy: 0.8913
Epoch 58/128
315/315 - 11s - loss: 0.3289 - accuracy: 0.8964
Epoch 59/128
315/315 - 11s - loss: 0.3296 - accuracy: 0.8942
Epoch 60/128
315/315 - 11s - loss: 0.3199 - accuracy: 0.8976
Epoch 61/128
315/315 - 11s - loss: 0.3191 - accuracy: 0.8970
Epoch 62/128
315/315 - 11s - loss: 0.3055 - accuracy: 0.9026
Epoch 63/128
315/315 - 11s - loss: 0.2947 - accuracy: 0.9057
Epoch 64/128
315/315 - 11s - loss: 0.3007 - accuracy: 0.9029
Epoch 65/128
315/315 - 11s - loss: 0.2888 - accuracy: 0.9062
Epoch 66/128
315/315 - 11s - loss: 0.2913 - accuracy: 0.9073
Epoch 67/128
315/315 - 11s - loss: 0.2762 - accuracy: 0.9116
Epoch 68/128
315/315 - 11s - loss: 0.2763 - accuracy: 0.9112
Epoch 69/128
315/315 - 11s - loss: 0.2697 - accuracy: 0.9131
Epoch 70/128
315/315 - 11s - loss: 0.2639 - accuracy: 0.9159
Epoch 71/128
315/315 - 11s - loss: 0.2641 - accuracy: 0.9150
Epoch 72/128
315/315 - 11s - loss: 0.2482 - accuracy: 0.9205
Epoch 73/128
315/315 - 11s - loss: 0.2505 - accuracy: 0.9201
Epoch 74/128
315/315 - 11s - loss: 0.2382 - accuracy: 0.9219
Epoch 75/128
315/315 - 11s - loss: 0.2405 - accuracy: 0.9224
Epoch 76/128
315/315 - 11s - loss: 0.2362 - accuracy: 0.9230
Epoch 77/128
315/315 - 11s - loss: 0.2281 - accuracy: 0.9262
Epoch 78/128
315/315 - 11s - loss: 0.2256 - accuracy: 0.9274
Epoch 79/128
315/315 - 11s - loss: 0.2220 - accuracy: 0.9282
Epoch 80/128
315/315 - 11s - loss: 0.2168 - accuracy: 0.9286
Epoch 81/128
315/315 - 11s - loss: 0.2144 - accuracy: 0.9311
Epoch 82/128
315/315 - 11s - loss: 0.2055 - accuracy: 0.9340
Epoch 83/128
315/315 - 11s - loss: 0.2101 - accuracy: 0.9321
Epoch 84/128
315/315 - 11s - loss: 0.1969 - accuracy: 0.9352
Epoch 85/128
315/315 - 11s - loss: 0.1970 - accuracy: 0.9349
Epoch 86/128
315/315 - 11s - loss: 0.1908 - accuracy: 0.9386
Epoch 87/128
315/315 - 11s - loss: 0.1914 - accuracy: 0.9376
Epoch 88/128
315/315 - 11s - loss: 0.1821 - accuracy: 0.9411
Epoch 89/128
315/315 - 11s - loss: 0.1833 - accuracy: 0.9405
Epoch 90/128
315/315 - 11s - loss: 0.1715 - accuracy: 0.9433
Epoch 91/128
315/315 - 11s - loss: 0.1852 - accuracy: 0.9396
Epoch 92/128
315/315 - 11s - loss: 0.1771 - accuracy: 0.9417
Epoch 93/128
315/315 - 11s - loss: 0.1750 - accuracy: 0.9429
Epoch 94/128
315/315 - 11s - loss: 0.1619 - accuracy: 0.9478
Epoch 95/128
315/315 - 11s - loss: 0.1631 - accuracy: 0.9463
Epoch 96/128
315/315 - 11s - loss: 0.1664 - accuracy: 0.9459
Epoch 97/128
315/315 - 11s - loss: 0.1600 - accuracy: 0.9471
Epoch 98/128
315/315 - 11s - loss: 0.1517 - accuracy: 0.9507
Epoch 99/128
315/315 - 11s - loss: 0.1461 - accuracy: 0.9516
Epoch 100/128
315/315 - 11s - loss: 0.1431 - accuracy: 0.9535
Epoch 101/128
315/315 - 11s - loss: 0.1484 - accuracy: 0.9525
Epoch 102/128
315/315 - 11s - loss: 0.1443 - accuracy: 0.9520
Epoch 103/128
315/315 - 11s - loss: 0.1384 - accuracy: 0.9547
Epoch 104/128
315/315 - 11s - loss: 0.1355 - accuracy: 0.9553
Epoch 105/128
315/315 - 11s - loss: 0.1383 - accuracy: 0.9549
Epoch 106/128
315/315 - 11s - loss: 0.1291 - accuracy: 0.9575
Epoch 107/128
315/315 - 11s - loss: 0.1500 - accuracy: 0.9514
Epoch 108/128
315/315 - 11s - loss: 0.1289 - accuracy: 0.9575
Epoch 109/128
315/315 - 11s - loss: 0.1352 - accuracy: 0.9554
Epoch 110/128
315/315 - 11s - loss: 0.1202 - accuracy: 0.9605
Epoch 111/128
315/315 - 11s - loss: 0.1263 - accuracy: 0.9578
Epoch 112/128
315/315 - 11s - loss: 0.1169 - accuracy: 0.9624
Epoch 113/128
315/315 - 11s - loss: 0.1260 - accuracy: 0.9581
Epoch 114/128
315/315 - 11s - loss: 0.1241 - accuracy: 0.9579
Epoch 115/128
315/315 - 11s - loss: 0.1133 - accuracy: 0.9628
Epoch 116/128
315/315 - 11s - loss: 0.1200 - accuracy: 0.9612
Epoch 117/128
315/315 - 11s - loss: 0.1166 - accuracy: 0.9605
Epoch 118/128
315/315 - 11s - loss: 0.1076 - accuracy: 0.9646
Epoch 119/128
315/315 - 11s - loss: 0.1088 - accuracy: 0.9639
Epoch 120/128
315/315 - 11s - loss: 0.1193 - accuracy: 0.9605
Epoch 121/128
315/315 - 11s - loss: 0.0915 - accuracy: 0.9700
Epoch 122/128
315/315 - 11s - loss: 0.1104 - accuracy: 0.9630
Epoch 123/128
315/315 - 11s - loss: 0.1050 - accuracy: 0.9657
Epoch 124/128
315/315 - 11s - loss: 0.1033 - accuracy: 0.9656
Epoch 125/128
315/315 - 11s - loss: 0.0974 - accuracy: 0.9685
Epoch 126/128
315/315 - 11s - loss: 0.0969 - accuracy: 0.9685
Epoch 127/128
315/315 - 11s - loss: 0.0947 - accuracy: 0.9697
Epoch 128/128
315/315 - 11s - loss: 0.1053 - accuracy: 0.9661
Out[ ]:
<keras.callbacks.History at 0x7f3b7808bf10>
In [ ]:
from sklearn.metrics import f1_score

# y_pred = model.predict_classes(X_test)
# (f1_score(y_pred, y_test))
y_pred = model.predict(X_test)
# print(y_pred)
# f1_score(y_pred, y_test)
print(y_pred[0].shape)
print(y_pred[0], y_test[0])
(20,)
[6.2287620e-07 3.1815189e-15 6.1700575e-08 1.1062143e-14 2.0086037e-11
 2.3471761e-11 9.9999857e-01 9.6272089e-08 1.8990770e-14 3.5908375e-08
 3.5859796e-07 1.8078548e-07 2.8209030e-10 4.3661312e-19 5.3045250e-12
 1.5641873e-09 1.1010564e-15 6.4647540e-17 8.4944372e-13 2.0096364e-13] [0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0]
In [ ]:
t = 0
c = 0
for i in range(len(y_pred)):
  t = t+1
  yyy = (np.max(y_pred[i])==y_pred[i])
  yP = yyy*(np.ones([1,20])[0]).astype(np.int)
  if np.array_equal(yP, y_test[i]):
    c = c+1
In [ ]:
c/t
Out[ ]:
0.8410530761650007
In [ ]:
# model.save('/content/drive/MyDrive/Speech Recognition/originalModel')
model.save('/content/drive/MyDrive/Speech Recognition/noisyModel')
WARNING:absl:Found untraced functions such as lstm_cell_layer_call_and_return_conditional_losses, lstm_cell_layer_call_fn, lstm_cell_layer_call_fn, lstm_cell_layer_call_and_return_conditional_losses, lstm_cell_layer_call_and_return_conditional_losses while saving (showing 5 of 5). These functions will not be directly callable after loading.
INFO:tensorflow:Assets written to: /content/drive/MyDrive/Speech Recognition/noisyModel/assets
INFO:tensorflow:Assets written to: /content/drive/MyDrive/Speech Recognition/noisyModel/assets
In [ ]:
from tensorflow import keras
originalModel = keras.models.load_model('/content/drive/MyDrive/Speech Recognition/orginalModel')
noisyModel = keras.models.load_model('/content/drive/MyDrive/Speech Recognition/noisyModel')
In [ ]:
from sklearn.preprocessing import LabelBinarizer
lb = LabelBinarizer()
lbFit = lb.fit_transform(y)
lbFit.shape
In [ ]:
y_pred = originalModel.predict(X)
t = 0
c = 0
len(y_pred)
In [ ]:
for i in range(len(y_pred)):
  t = t+1
  yyy = (np.max(y_pred[i])==y_pred[i])
  yP = yyy*(np.ones([1,20])[0]).astype(np.int)
  if np.array_equal(yP, lbFit[i]):
    c = c+1
  if (i%5000)==0:
    print(c/t)
In [ ]:
c/t
In [ ]:
c
In [ ]:
t
In [ ]: