# !pip install -U pandas
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from google.colab import drive
drive.mount('/content/drive', force_remount=True)
Mounted at /content/drive
!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
# a = df['mfcc'][0].replace(' ',',').replace('\n','')
# b = np.fromstring(a, sep=',')
# b
!python --version
y = df['word']
X = df['mfcc']
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)
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
print(len(X))
a = 0
for m in X:
if m.shape != (32,32):
# print(m.shape)
a = a+1
print(a)
47348 0
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
from sklearn.preprocessing import LabelBinarizer
lb = LabelBinarizer()
lbFit = lb.fit_transform(y)
lbFit.shape
(47348, 20)
X_train, X_test, y_train, y_test = train_test_split(np.asarray(X),lbFit,random_state = 42, test_size = 0.15)
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
# import tensorflow as tf
# sess = tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(log_device_placement=True))
# from keras import backend as K
# K.tensorflow_backend._get_available_gpus()
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'])
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
<keras.callbacks.History at 0x7f3b7808bf10>
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]
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
c/t
0.8410530761650007
# 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
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')
from sklearn.preprocessing import LabelBinarizer
lb = LabelBinarizer()
lbFit = lb.fit_transform(y)
lbFit.shape
y_pred = originalModel.predict(X)
t = 0
c = 0
len(y_pred)
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)
c/t
c
t