Diff of /code/models.py [000000] .. [365bd4]

Switch to side-by-side view

--- a
+++ b/code/models.py
@@ -0,0 +1,146 @@
+from keras import optimizers, losses, activations, models
+from keras.layers import Dense, Input, Dropout, Convolution1D, MaxPool1D, GlobalMaxPool1D, GlobalAveragePooling1D, \
+    concatenate, SpatialDropout1D, TimeDistributed, Bidirectional, LSTM
+from keras_contrib.layers import CRF
+
+from utils import WINDOW_SIZE
+
+def get_model():
+    nclass = 5
+    inp = Input(shape=(3000, 1))
+    img_1 = Convolution1D(16, kernel_size=5, activation=activations.relu, padding="valid")(inp)
+    img_1 = Convolution1D(16, kernel_size=5, activation=activations.relu, padding="valid")(img_1)
+    img_1 = MaxPool1D(pool_size=2)(img_1)
+    img_1 = SpatialDropout1D(rate=0.01)(img_1)
+    img_1 = Convolution1D(32, kernel_size=3, activation=activations.relu, padding="valid")(img_1)
+    img_1 = Convolution1D(32, kernel_size=3, activation=activations.relu, padding="valid")(img_1)
+    img_1 = MaxPool1D(pool_size=2)(img_1)
+    img_1 = SpatialDropout1D(rate=0.01)(img_1)
+    img_1 = Convolution1D(32, kernel_size=3, activation=activations.relu, padding="valid")(img_1)
+    img_1 = Convolution1D(32, kernel_size=3, activation=activations.relu, padding="valid")(img_1)
+    img_1 = MaxPool1D(pool_size=2)(img_1)
+    img_1 = SpatialDropout1D(rate=0.01)(img_1)
+    img_1 = Convolution1D(256, kernel_size=3, activation=activations.relu, padding="valid")(img_1)
+    img_1 = Convolution1D(256, kernel_size=3, activation=activations.relu, padding="valid")(img_1)
+    img_1 = GlobalMaxPool1D()(img_1)
+    img_1 = Dropout(rate=0.01)(img_1)
+
+    dense_1 = Dropout(rate=0.01)(Dense(64, activation=activations.relu, name="dense_1")(img_1))
+    dense_1 = Dropout(rate=0.05)(Dense(64, activation=activations.relu, name="dense_2")(dense_1))
+    dense_1 = Dense(nclass, activation=activations.softmax, name="dense_3")(dense_1)
+
+    model = models.Model(inputs=inp, outputs=dense_1)
+    opt = optimizers.Adam(0.001)
+
+    model.compile(optimizer=opt, loss=losses.sparse_categorical_crossentropy, metrics=['acc'])
+    model.summary()
+    return model
+
+def get_base_model():
+    inp = Input(shape=(3000, 1))
+    img_1 = Convolution1D(16, kernel_size=5, activation=activations.relu, padding="valid")(inp)
+    img_1 = Convolution1D(16, kernel_size=5, activation=activations.relu, padding="valid")(img_1)
+    img_1 = MaxPool1D(pool_size=2)(img_1)
+    img_1 = SpatialDropout1D(rate=0.01)(img_1)
+    img_1 = Convolution1D(32, kernel_size=3, activation=activations.relu, padding="valid")(img_1)
+    img_1 = Convolution1D(32, kernel_size=3, activation=activations.relu, padding="valid")(img_1)
+    img_1 = MaxPool1D(pool_size=2)(img_1)
+    img_1 = SpatialDropout1D(rate=0.01)(img_1)
+    img_1 = Convolution1D(32, kernel_size=3, activation=activations.relu, padding="valid")(img_1)
+    img_1 = Convolution1D(32, kernel_size=3, activation=activations.relu, padding="valid")(img_1)
+    img_1 = MaxPool1D(pool_size=2)(img_1)
+    img_1 = SpatialDropout1D(rate=0.01)(img_1)
+    img_1 = Convolution1D(256, kernel_size=3, activation=activations.relu, padding="valid")(img_1)
+    img_1 = Convolution1D(256, kernel_size=3, activation=activations.relu, padding="valid")(img_1)
+    img_1 = GlobalMaxPool1D()(img_1)
+    img_1 = Dropout(rate=0.01)(img_1)
+
+    dense_1 = Dropout(0.01)(Dense(64, activation=activations.relu, name="dense_1")(img_1))
+
+    base_model = models.Model(inputs=inp, outputs=dense_1)
+    opt = optimizers.Adam(0.001)
+
+    base_model.compile(optimizer=opt, loss=losses.sparse_categorical_crossentropy, metrics=['acc'])
+    #model.summary()
+    return base_model
+
+
+def get_model_cnn():
+    nclass = 5
+
+    seq_input = Input(shape=(None, 3000, 1))
+    base_model = get_base_model()
+    # for layer in base_model.layers:
+    #     layer.trainable = False
+    encoded_sequence = TimeDistributed(base_model)(seq_input)
+    encoded_sequence = SpatialDropout1D(rate=0.01)(Convolution1D(128,
+                                                               kernel_size=3,
+                                                               activation="relu",
+                                                               padding="same")(encoded_sequence))
+    encoded_sequence = Dropout(rate=0.05)(Convolution1D(128,
+                                                               kernel_size=3,
+                                                               activation="relu",
+                                                               padding="same")(encoded_sequence))
+
+    #out = TimeDistributed(Dense(nclass, activation="softmax"))(encoded_sequence)
+    out = Convolution1D(nclass, kernel_size=3, activation="softmax", padding="same")(encoded_sequence)
+
+    model = models.Model(seq_input, out)
+
+    model.compile(optimizers.Adam(0.001), losses.sparse_categorical_crossentropy, metrics=['acc'])
+    model.summary()
+
+    return model
+
+def get_model_lstm():
+    nclass = 5
+
+    seq_input = Input(shape=(None, 3000, 1))
+    base_model = get_base_model()
+    for layer in base_model.layers:
+        layer.trainable = False
+    encoded_sequence = TimeDistributed(base_model)(seq_input)
+    encoded_sequence = Bidirectional(LSTM(100, return_sequences=True))(encoded_sequence)
+    encoded_sequence = Dropout(rate=0.5)(encoded_sequence)
+    encoded_sequence = Bidirectional(LSTM(100, return_sequences=True))(encoded_sequence)
+    #out = TimeDistributed(Dense(nclass, activation="softmax"))(encoded_sequence)
+    out = Convolution1D(nclass, kernel_size=1, activation="softmax", padding="same")(encoded_sequence)
+
+    model = models.Model(seq_input, out)
+
+    model.compile(optimizers.Adam(0.001), losses.sparse_categorical_crossentropy, metrics=['acc'])
+    model.summary()
+
+    return model
+
+def get_model_cnn_crf(lr=0.001):
+    nclass = 5
+
+    seq_input = Input(shape=(None, 3000, 1))
+    base_model = get_base_model()
+    # for layer in base_model.layers:
+    #     layer.trainable = False
+    encoded_sequence = TimeDistributed(base_model)(seq_input)
+    encoded_sequence = SpatialDropout1D(rate=0.01)(Convolution1D(128,
+                                                               kernel_size=3,
+                                                               activation="relu",
+                                                               padding="same")(encoded_sequence))
+    encoded_sequence = Dropout(rate=0.05)(Convolution1D(128,
+                                                               kernel_size=3,
+                                                               activation="linear",
+                                                               padding="same")(encoded_sequence))
+
+    #out = TimeDistributed(Dense(nclass, activation="softmax"))(encoded_sequence)
+    # out = Convolution1D(nclass, kernel_size=3, activation="linear", padding="same")(encoded_sequence)
+
+    crf = CRF(nclass, sparse_target=True)
+
+    out = crf(encoded_sequence)
+
+
+    model = models.Model(seq_input, out)
+
+    model.compile(optimizers.Adam(lr), crf.loss_function, metrics=[crf.accuracy])
+    model.summary()
+
+    return model