In [1]:
import pandas as pd
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.wrappers.scikit_learn import KerasClassifier
from keras.optimizers import SGD
from keras.constraints import maxnorm
from sklearn.preprocessing import StandardScaler, LabelEncoder
from sklearn.pipeline import Pipeline
from sklearn.model_selection import KFold, StratifiedKFold, cross_val_score
In [2]:
df = pd.read_csv('~/Documents/Deep_Learning_with_Keras/data/sonar.csv', header=None)
X = df[df.columns[:-1]].values
y = df[df.columns[-1]].values
In [3]:
label = LabelEncoder()
y = label.fit_transform(y)
In [4]:
def wider_model():
model = Sequential()
model.add(Dense(60, input_dim=60, kernel_initializer='normal', activation='relu' ))
model.add(Dense(30, kernel_initializer='normal', activation='relu' ))
model.add(Dense(1, kernel_initializer='normal', activation='sigmoid'))
sgd = SGD(lr=0.01, momentum=0.8, decay=0.0, nesterov=False)
model.compile(loss='binary_crossentropy', optimizer=sgd, metrics=['accuracy'])
return model
In [5]:
np.random.seed(7)
model = KerasClassifier(build_fn=wider_model, epochs=300, batch_size=16, verbose=0)
pipeline = Pipeline([
('scaler', StandardScaler()),
('cls', model)
])
kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=7)
results = cross_val_score(pipeline, X, y, cv=kfold)
print(results.mean(), results.std())
In [6]:
def dropout_model():
model = Sequential()
model.add(Dropout(0.2, input_shape=(60,)))
model.add(Dense(60, kernel_initializer='normal', activation='relu', kernel_constraint=maxnorm(3)))
model.add(Dense(30, kernel_initializer='normal', activation='relu', kernel_constraint=maxnorm(3)))
model.add(Dense(1, kernel_initializer='normal', activation='sigmoid'))
sgd = SGD(lr=0.01, momentum=0.8, decay=0.0, nesterov=False)
model.compile(loss='binary_crossentropy', optimizer=sgd, metrics=['accuracy'])
return model
In [7]:
np.random.seed(7)
model = KerasClassifier(build_fn=dropout_model, epochs=300, batch_size=16, verbose=0)
pipeline = Pipeline([
('scaler', StandardScaler()),
('reg', model)
])
kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=7)
results = cross_val_score(pipeline, X, y, cv=kfold)
print(results.mean(), results.std())
In [ ]: