Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
def masktraining_skip_auto(path_train, path_valid, batch_size, epochs, path_save_model, path_weights_model, option):
#!/usr/bin/env python3
# -*- coding: utf8 -*-
import ctypes
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '1'
os.environ['TF_ENABLE_XLA'] = '1'
os.environ['TF_ENABLE_AUTO_MIXED_PRECISION'] = '1'
os.environ['TF_ENABLE_CUDNN_RNN_TENSOR_OP_MATH_FP32'] = '1'
os.environ['TF_DISABLE_CUDNN_TENSOR_OP_MATH'] = '1'
os.environ['TF_ENABLE_CUBLAS_TENSOR_OP_MATH_FP32'] = '1'
import numpy as np
import tensorflow as tf
from tensorflow import keras
from keras.layers import Add, Multiply, Input, Dense, Flatten, Dropout, Conv2D, MaxPooling2D, Conv2DTranspose, LeakyReLU, Reshape, Activation, BatchNormalization, UpSampling2D
from keras.models import Model
from keras.constraints import max_norm
from keras.optimizers import Adam, SGD
from keras.utils import to_categorical, normalize
from keras.callbacks import ModelCheckpoint
from keras import losses
from keras import backend as K
import matplotlib.pyplot as plt
import random
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
try:
tf.config.experimental.set_virtual_device_configuration(gpus[0], [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=4096)])
except RuntimeError as e:
print(e)
def build_model(self):
max_norm_value = 100.0
# x = keras.Input((self.seq_len, len(self.alphabet)))
input_noisy = Input(shape=(260,5,1))
input_noise = Input(shape=(260,5,1))
input_speech = Input(shape=(260,5,1))
normalized = BatchNormalization()(input)
conv_1 = Conv2D(filters=32, kernel_size=(1,3),strides=1,padding="valid",kernel_constraint=max_norm(max_norm_value), kernel_initializer="he_normal")(input_noisy)
leakyrelu_1 = LeakyReLU()(conv_1)
conv_2 = Conv2D(filters=32, kernel_size=(1,3),strides=1,padding="valid",kernel_constraint=max_norm(max_norm_value), kernel_initializer="he_normal")(leakyrelu_1)
leakyrelu_2 = LeakyReLU()(conv_2)
conv_3 = Conv2D(filters=32, kernel_size=(16,1),strides=1,padding="same", kernel_constraint=max_norm(max_norm_value), kernel_initializer="he_normal")(leakyrelu_2)
leakyrelu_3 = LeakyReLU()(conv_3)
maxpool_1 = MaxPooling2D(pool_size=(2,1))(leakyrelu_3)
conv_4 = Conv2D(filters=32, kernel_size=(16,1),strides=1,padding="same", kernel_constraint=max_norm(max_norm_value), kernel_initializer="he_normal")(maxpool_1)
leakyrelu_4 = LeakyReLU()(conv_4)
maxpool_2 = MaxPooling2D(pool_size=(2,1))(leakyrelu_4)
conv_5 = Conv2D(filters=32, kernel_size=(16,1),strides=1,padding="valid", kernel_constraint=max_norm(max_norm_value), kernel_initializer="he_normal")(maxpool_2)
leakyrelu_5 = LeakyReLU()(conv_5)
conv_6 = Conv2D(filters=32, kernel_size=(16,1),strides=1,padding="valid", kernel_constraint=max_norm(max_norm_value), kernel_initializer="he_normal")(leakyrelu_5)
leakyrelu_6 = LeakyReLU()(conv_6)
convtrans_1 = Conv2DTranspose(filters=32, kernel_size=(16,1),strides=1,padding="valid", kernel_constraint=max_norm(max_norm_value), kernel_initializer="he_normal")(leakyrelu_6)
leakyrelu_7 = LeakyReLU()(convtrans_1)
convtrans_2 = Conv2DTranspose(filters=32, kernel_size=(16,1),strides=1, padding="valid", kernel_constraint=max_norm(max_norm_value), kernel_initializer="he_normal")(leakyrelu_7)
leakyrelu_8 = LeakyReLU()(convtrans_2)
skip_1 = Add()([maxpool_2,leakyrelu_8])
up_1 = UpSampling2D(size=(2,1))(skip_1)
conv_7 = Conv2D(filters=32, kernel_size=(16,1), strides=1, padding="same", kernel_constraint=max_norm(max_norm_value), kernel_initializer="he_normal")(up_1)
leakyrelu_9 = LeakyReLU()(conv_7)
skip_2 = Add()([leakyrelu_4,leakyrelu_9])
up_2 = UpSampling2D(size=(2,1))(skip_2)
conv_8 = Conv2D(filters=32, kernel_size=(16,1), strides=1, padding="same", kernel_constraint=max_norm(max_norm_value), kernel_initializer="he_normal")(up_2)
leakyrelu_10 = LeakyReLU()(conv_8)
skip_3 = Add()([leakyrelu_3,leakyrelu_10])
# mask from noisy input
mask = Conv2D(filters=1, kernel_size=(16,1),strides=1, padding="same", activation='linear', kernel_constraint=max_norm(max_norm_value), kernel_initializer="he_normal")(skip_3)
# filtered speech and noise component
n_tilde = Multiply()([mask,input_noise])
s_tilde = Multiply()([mask,input_speech])
model = Model(inputs=[input_noisy,input_noise,input_speech], outputs=[n_tilde,s_tilde])
return model
if __name__ == "__main__":
model = build_model()
model.compile(loss='mse', loss_weights=[0.5, 0.5], optimizer='adam', metrics=['metrics','accuracy'])
if not os.path.exists(path_weights_model):
try:
os.mkdir(path_weights_model)
except Exception as e:
print("Konnte Ordner für Gewichte nicht erstellen" + str(e))
filepath = path_weights_model + "/weights-{epoch:02d}-{loss:.4f}.hdf5"
checkpoint = ModelCheckpoint(
filepath,
monitor='loss',
verbose=0,
save_best_only=True,
mode='min'
)
model.summary()
history = model.fit(train_generator, steps_per_epoch = int(np.floor(len(train) / batch_size)), epochs = epochs, validation_data = valid_generator, validation_steps = int(np.floor(len(valid) / batch_size)), callbacks=[checkpoint], use_multiprocessing=True)
# what generator must Returns
# model.fit([train_input_noisy, train_input_noise, train_input_speech], [train_residual_noise_power_target, train_clean_speech], ..., validation_data = [[val_input_noisy, val_input_noise, val_input_speech], [val_residual_noise_power_target, vali_clean_speech]])
model.summary()
model.save(path_save_model)
plt.style.use("ggplot")
plt.figure()
plt.plot(history.history["loss"], label="train_loss")
plt.plot(history.history["val_loss"], label="val_loss")
plt.title("Training Loss and Accuracy")
plt.xlabel("Epochs")
plt.ylabel("Loss/Accuracy")
plt.legend(loc="lower left")
plt.savefig(path_save_model + '/testrun.png', dpi=400)
plt.show()
return