def model(input_shape): """ Function creating the model's graph in Keras. Argument: input_shape -- shape of the model's input data (using Keras conventions) Returns: model -- Keras model instance """ X_input = Input(shape=input_shape) conv_1 = Conv3D(filters=32, kernel_size=(1, 1, 1), padding="same", strides=(1, 1, 1), activation="elu")(X_input) conv_2 = Conv3D(filters=64, kernel_size=(1, 1, 1), padding="same", strides=(1, 1, 1), activation="elu")(conv_1) conv_3 = Conv3D(filters=128, kernel_size=(1, 1, 1), padding="same", strides=(1, 1, 1), activation="elu")(conv_2) shape = conv_3.get_shape().as_list() pool_2_flat = Reshape([shape[1], shape[2] * shape[3] * shape[4]])(conv_3) fc = Dense(1024, activation="elu")(pool_2_flat) fc_drop = Dropout(dropout_prob)(fc) lstm_in = Reshape([10, 1024])(fc_drop) # lstm_1 = LSTM(units=1024, return_sequences=True, unit_forget_bias=True, dropout=dropout_prob)(lstm_in) # rnn_output = LSTM(units=1024, return_sequences=False, unit_forget_bias=True)(lstm_1) lstm_1 = GRU(units=1024, return_sequences=True, dropout=dropout_prob)(lstm_in) rnn_output = GRU(units=1024, return_sequences=False)(lstm_1) shape_rnn_out = rnn_output.get_shape().as_list() fc_out = Dense(shape_rnn_out[1], activation="elu")(rnn_output) fc_drop = Dropout(dropout_prob)(fc_out) y_ = Dense(n_labels)(fc_drop) y_posi = Softmax()(y_) model = Model(inputs=X_input, outputs=y_posi) return model