| 7 | |
| 8 | |
| 9 | class AutoEncoder: |
| 10 | def __init__(self, encoding_dim, input_shape): |
| 11 | self.encoding_dim = encoding_dim |
| 12 | self.input_shape = input_shape |
| 13 | |
| 14 | def build_model(self, encoded1_shape, encoded2_shape, decoded1_shape, decoded2_shape): |
| 15 | input_data = Input(shape=(1, self.input_shape)) |
| 16 | |
| 17 | # encoded1 = Dense(encoded1_shape, activation="relu", activity_regularizer=regularizers.l2(0))(input_data) |
| 18 | # encoded2 = Dense(encoded2_shape, activation="relu", activity_regularizer=regularizers.l2(0))(encoded1) |
| 19 | # encoded3 = Dense(self.encoding_dim, activation="relu", activity_regularizer=regularizers.l2(0))(encoded2) |
| 20 | # decoded1 = Dense(decoded1_shape, activation="relu", activity_regularizer=regularizers.l2(0))(encoded3) |
| 21 | # decoded2 = Dense(decoded2_shape, activation="relu", activity_regularizer=regularizers.l2(0))(decoded1) |
| 22 | # decoded = Dense(self.input_shape, activation="sigmoid", activity_regularizer=regularizers.l2(0))(decoded2) |
| 23 | |
| 24 | encoded3 = Dense(self.encoding_dim, activation="relu", activity_regularizer=regularizers.l2(0))(input_data) |
| 25 | decoded = Dense(self.input_shape, activation="sigmoid", activity_regularizer=regularizers.l2(0))(encoded3) |
| 26 | |
| 27 | self.autoencoder = Model(inputs=input_data, outputs=decoded) |
| 28 | self.encoder = Model(input_data, encoded3) |
| 29 | |
| 30 | def train_model(self, model, data, epochs, model_name, save_model=True): |
| 31 | |
| 32 | model.compile(loss="mean_squared_error", optimizer="adam", metrics=['acc', 'mae']) |
| 33 | |
| 34 | train = data |
| 35 | ntrain = np.array(train) |
| 36 | train_data = np.reshape(ntrain, (len(ntrain), 1, self.input_shape)) |
| 37 | |
| 38 | model.fit(train_data, train_data, epochs=epochs) |
| 39 | |
| 40 | if save_model: |
| 41 | model.save(f"models/saved_models/{model_name}.h5") |
| 42 | |
| 43 | def test_model(self, model, data): |
| 44 | test = data |
| 45 | ntest = np.array(test) |
| 46 | test_data = np.reshape(ntest, (len(ntest), 1, self.input_shape)) |
| 47 | |
| 48 | print(model.evaluate(test_data, test_data)) |
| 49 | |
| 50 | def encode_data(self, data, csv_path, save_csv=True): |
| 51 | coded_train = [] |
| 52 | for i in range(len(data)): |
| 53 | curr_data = np.array(data.iloc[i, :]) |
| 54 | values = np.reshape(curr_data, (1, 1, self.input_shape)) |
| 55 | coded = self.encoder.predict(values) |
| 56 | shaped = np.reshape(coded, (20,)) |
| 57 | coded_train.append(shaped) |
| 58 | |
| 59 | train_coded = pd.DataFrame(coded_train, index=np.arange(len(coded_train)), columns=np.arange(20)) |
| 60 | if save_csv: |
| 61 | train_coded.to_csv(f"{csv_path}") |
| 62 | return train_coded |
| 63 |
no outgoing calls
no test coverage detected