In [1]:
%autosave 120
from psychedelic.jupyter_implicit import *
In [2]:
import numpy as np
np.random.seed(1337)
import datetime
from IPython.display import SVG
import keras
from keras.datasets import mnist
from keras.layers import Dense, Flatten
from keras.layers import Conv1D, Conv2D, MaxPooling1D, MaxPooling2D, Dropout
from keras.models import Sequential
from keras.utils import plot_model
from keras.utils.vis_utils import model_to_dot
import matplotlib.pylab as plt
import pandas as pd
from sklearn.model_selection import train_test_split
import seaborn as sns
sns.set(style = 'ticks')
sns.set_palette('husl')
import talos as ta
In [3]:
%matplotlib inline
plt.rcParams["figure.figsize"] = [10, 10]
In [4]:
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['species'] = pd.Series(iris.target).map(dict(zip(range(3), iris.target_names)))
#df.head()
sns.pairplot(df.iloc[:, 1:6], hue="species");
df['labels'] = df['species'].astype('category').cat.codes
x = df[['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']]
y = df['labels']
num_classes = len(y.unique())
y = keras.utils.to_categorical(y, len(y.unique()))
x = np.asarray(x)
y = np.asarray(y)
x = x.reshape(len(x), 4, 1)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.33, shuffle=True)
In [5]:
model_name = UUID4MIN()
print('model name:', model_name)
model = Sequential()
model.add(Conv1D(32, (3), input_shape=(4, 1), activation='tanh'))
model.add(MaxPooling1D(pool_size=(2)))
model.add(Flatten())
model.add(Dropout(rate=0.5))
model.add(Dense(100, activation='tanh'))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss="categorical_crossentropy", optimizer="nadam", metrics=['accuracy'])
plot_model(model, to_file="model.png")
model.summary()
In [6]:
stop_early_with_manual = EarlyStoppingWithManualStop(
filename = 'safeword_'+model_name,
monitor = 'val_loss',
min_delta = 0.0001,
patience = 100,
verbose = 1,
mode = 'auto',
baseline = None,
restore_best_weights = True
)
model.fit(
x_train,
y_train,
batch_size = 128,
epochs = 20,
verbose = False,
validation_data = (x_test, y_test),
callbacks = [TensorBoardCallback(model_name=model_name), PlotLossesCallback(), ProgressStatus(clear_output_continuously=False)]
)
filepath = save_model(model, model_name=model_name)
In [7]:
score = model.evaluate(x_test, y_test, verbose=False)
score[1]
Out[7]: