1#!/usr/bin/python
2
3from __future__ import print_function
4
5from keras.models import Sequential
6from keras.models import Model
7from keras.layers import Input
8from keras.layers import Dense
9from keras.layers import LSTM
10from keras.layers import GRU
11from keras.layers import SimpleRNN
12from keras.layers import Dropout
13from keras import losses
14import h5py
15
16from keras import backend as K
17import numpy as np
18
19print('Build model...')
20main_input = Input(shape=(None, 22), name='main_input')
21#x = Dense(44, activation='relu')(main_input)
22#x = GRU(44, dropout=0.0, recurrent_dropout=0.0, activation='tanh', recurrent_activation='sigmoid', return_sequences=True)(x)
23x=main_input
24x = GRU(128, activation='tanh', recurrent_activation='sigmoid', return_sequences=True)(x)
25#x = GRU(128, return_sequences=True)(x)
26#x = GRU(22, activation='relu', return_sequences=True)(x)
27x = Dense(22, activation='sigmoid')(x)
28#x = Dense(22, activation='softplus')(x)
29model = Model(inputs=main_input, outputs=x)
30
31batch_size = 32
32
33print('Loading data...')
34with h5py.File('denoise_data.h5', 'r') as hf:
35    all_data = hf['denoise_data'][:]
36print('done.')
37
38window_size = 500
39
40nb_sequences = len(all_data)//window_size
41print(nb_sequences, ' sequences')
42x_train = all_data[:nb_sequences*window_size, :-22]
43x_train = np.reshape(x_train, (nb_sequences, window_size, 22))
44
45y_train = np.copy(all_data[:nb_sequences*window_size, -22:])
46y_train = np.reshape(y_train, (nb_sequences, window_size, 22))
47
48#y_train = -20*np.log10(np.add(y_train, .03));
49
50all_data = 0;
51x_train = x_train.astype('float32')
52y_train = y_train.astype('float32')
53
54print(len(x_train), 'train sequences. x shape =', x_train.shape, 'y shape = ', y_train.shape)
55
56# try using different optimizers and different optimizer configs
57model.compile(loss='mean_squared_error',
58              optimizer='adam',
59              metrics=['binary_accuracy'])
60
61print('Train...')
62model.fit(x_train, y_train,
63          batch_size=batch_size,
64          epochs=200,
65          validation_data=(x_train, y_train))
66model.save("newweights.hdf5")
67