합성곱 기반 시계열 처리
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inlineimport pandas as pd
files = {'train': '/data/ford/train.tsv', 'test': '/data/ford/test.tsv'}
try:
train = pd.read_table(files['train'], header=None)
test = pd.read_table(files['test'], header=None)
except FileNotFoundError:
print('Downloading files ...')
url = "https://raw.githubusercontent.com/hfawaz/cd-diagram/master/FordA/"
train = pd.read_table(f'{url}FordA_TRAIN.tsv', header=None)
test = pd.read_table(f'{url}FordA_TEST.tsv', header=None)
train.to_csv('/data/ford/train.tsv', sep='\t', encoding='utf8', index=False, header=False)
test.to_csv('/data/ford/test.tsv', sep='\t', encoding='utf8', index=False, header=False)y_train = train[0]
X_train = train.drop(columns=0)
y_test = test[0]
X_test = test.drop(columns=0)y_train.value_counts()X_train.shape, X_test.shapedef compare_features(sample_index):
frame = pd.concat([
X_train[y_train == 1].iloc[sample_index].reset_index(drop=True),
X_train[y_train == -1].iloc[sample_index].reset_index(drop=True)
], axis=1)
frame.columns = [1, -1]
return frame
compare_features(0).plot()X_train = X_train.values.reshape(*X_train.shape, 1)
X_test = X_test.values.reshape(*X_test.shape, 1)
X_train.shape, X_test.shapey_train = np.where(y_train == 1, 1, 0)
y_test = np.where(y_test == 1, 1, 0)idx = np.random.permutation(len(X_train))
X_train = X_train[idx]
y_train = y_train[idx]from tensorflow.keras import Sequential, layers
def make_model(input_shape):
model = Sequential([
layers.Input(input_shape),
layers.Conv1D(64, kernel_size=3, padding='same'),
layers.BatchNormalization(),
layers.Activation('relu'),
layers.Conv1D(64, kernel_size=3, padding='same'),
layers.BatchNormalization(),
layers.Activation('relu'),
layers.Conv1D(64, kernel_size=3, padding='same'),
layers.BatchNormalization(),
layers.Activation('relu'),
layers.GlobalAveragePooling1D(),
layers.Dense(1)
])
return model
model = make_model(input_shape=X_train.shape[1:])
model.summary()from tensorflow.keras.losses import BinaryCrossentropy
from tensorflow.keras.callbacks import ModelCheckpoint, ReduceLROnPlateau, EarlyStopping
model.compile(optimizer='adam', loss=BinaryCrossentropy(from_logits=True), metrics=['acc'])
history = model.fit(
X_train, y_train, batch_size=32, epochs=500, validation_split=0.2,
callbacks=[
ModelCheckpoint("/model/ford/", monitor='val_loss', save_best_only=True),
ReduceLROnPlateau(factor=0.5, patience=20, min_lr=0.0001),
EarlyStopping(patience=50, verbose=1)
])print('Loss: {0}, Acc: {1:.2%}'.format(*model.evaluate(X_test, y_test)))pd.DataFrame(history.history)[['loss', 'val_loss']].plot()pd.DataFrame(history.history)[['acc', 'val_acc']].plot()