from __future__ import absolute_import, division, print_function, unicode_literals
import os, sys
from os.path import abspath
module_path = os.path.abspath(os.path.join('..'))
if module_path not in sys.path:
sys.path.append(module_path)
import warnings
warnings.filterwarnings('ignore')
import keras.backend as k
from keras.models import Sequential
from keras.layers import Dense, Flatten, Conv2D, MaxPooling2D, Activation, Dropout
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
tf.get_logger().setLevel('ERROR')
from art.estimators.classification import KerasClassifier
from art.attacks.poisoning import PoisoningAttackBackdoor, PoisoningAttackCleanLabelBackdoor
from art.attacks.poisoning.perturbations import add_pattern_bd
from art.utils import load_mnist, preprocess, to_categorical
from art.defences.trainer import AdversarialTrainerMadryPGD
from art.estimators.classification.deep_partition_ensemble import DeepPartitionEnsemble
(x_raw, y_raw), (x_raw_test, y_raw_test), min_, max_ = load_mnist(raw=True)
# Random Selection:
n_train = np.shape(x_raw)[0]
num_selection = 10000
random_selection_indices = np.random.choice(n_train, num_selection)
x_raw = x_raw[random_selection_indices]
y_raw = y_raw[random_selection_indices]
# Poison training data
percent_poison = .33
x_train, y_train = preprocess(x_raw, y_raw)
x_train = np.expand_dims(x_train, axis=3)
x_test, y_test = preprocess(x_raw_test, y_raw_test)
x_test = np.expand_dims(x_test, axis=3)
# Shuffle training data
n_train = np.shape(y_train)[0]
shuffled_indices = np.arange(n_train)
np.random.shuffle(shuffled_indices)
x_train = x_train[shuffled_indices]
y_train = y_train[shuffled_indices]
# Create Keras convolutional neural network - basic architecture from Keras examples
# Source here: https://github.com/keras-team/keras/blob/master/examples/mnist_cnn.py
def create_model():
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=x_train.shape[1:]))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
backdoor = PoisoningAttackBackdoor(add_pattern_bd)
example_target = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
pdata, plabels = backdoor.poison(x_test, y=example_target)
plt.imshow(pdata[0].squeeze())
<matplotlib.image.AxesImage at 0x7fd1381b56d0>
For this example, we will select 9 as the target class. Thus, the adversary's goal is to poison the model so adding a trigger will result in the trained model misclassifying the triggered input as a 9.
First, the adversary will create a proxy classifier (i.e., a classifier that is similar to the target classifier). As the clean label attack generates noise using PGD in order to encourage the trained classifier to rely on the trigger, it is important that the generated noise be transferable. Thus, adversarial training is used.
# Poison some percentage of all non-nines to nines
targets = to_categorical([9], 10)[0]
proxy = AdversarialTrainerMadryPGD(KerasClassifier(create_model()), nb_epochs=10, eps=0.15, eps_step=0.001)
proxy.fit(x_train, y_train)
Precompute adv samples: 0%| | 0/1 [00:00<?, ?it/s]
Adversarial training epochs: 0%| | 0/10 [00:00<?, ?it/s]
attack = PoisoningAttackCleanLabelBackdoor(backdoor=backdoor, proxy_classifier=proxy.get_classifier(),
target=targets, pp_poison=percent_poison, norm=2, eps=5,
eps_step=0.1, max_iter=200)
pdata, plabels = attack.poison(x_train, y_train)
PGD - Random Initializations: 0%| | 0/1 [00:00<?, ?it/s]
PGD - Iterations: 0%| | 0/200 [00:00<?, ?it/s]
PGD - Random Initializations: 0%| | 0/1 [00:00<?, ?it/s]
PGD - Iterations: 0%| | 0/200 [00:00<?, ?it/s]
PGD - Random Initializations: 0%| | 0/1 [00:00<?, ?it/s]
PGD - Iterations: 0%| | 0/200 [00:00<?, ?it/s]
PGD - Random Initializations: 0%| | 0/1 [00:00<?, ?it/s]
PGD - Iterations: 0%| | 0/200 [00:00<?, ?it/s]
PGD - Random Initializations: 0%| | 0/1 [00:00<?, ?it/s]
PGD - Iterations: 0%| | 0/200 [00:00<?, ?it/s]
PGD - Random Initializations: 0%| | 0/1 [00:00<?, ?it/s]
PGD - Iterations: 0%| | 0/200 [00:00<?, ?it/s]
PGD - Random Initializations: 0%| | 0/1 [00:00<?, ?it/s]
PGD - Iterations: 0%| | 0/200 [00:00<?, ?it/s]
PGD - Random Initializations: 0%| | 0/1 [00:00<?, ?it/s]
PGD - Iterations: 0%| | 0/200 [00:00<?, ?it/s]
PGD - Random Initializations: 0%| | 0/1 [00:00<?, ?it/s]
PGD - Iterations: 0%| | 0/200 [00:00<?, ?it/s]
PGD - Random Initializations: 0%| | 0/1 [00:00<?, ?it/s]
PGD - Iterations: 0%| | 0/200 [00:00<?, ?it/s]
PGD - Random Initializations: 0%| | 0/1 [00:00<?, ?it/s]
PGD - Iterations: 0%| | 0/200 [00:00<?, ?it/s]
poisoned = pdata[np.all(plabels == targets, axis=1)]
poisoned_labels = plabels[np.all(plabels == targets, axis=1)]
print(len(poisoned))
for i in range(len(poisoned)):
if poisoned[i][0][0] != 0:
plt.imshow(poisoned[i].squeeze())
plt.show()
print(f"Index: {i} Label: {np.argmax(poisoned_labels[i])}")
break
1005
Index: 1 Label: 9
We will initialize four models. The first is a single model architecture. The other three are DPA models with varying ensemble sizes to demonstrate the tradeoff between clean accuracy and poison accuracy. This make take some time because of the model copying.
model = KerasClassifier(create_model())
dpa_model_10 = DeepPartitionEnsemble(model, ensemble_size=10)
dpa_model_20 = DeepPartitionEnsemble(model, ensemble_size=20)
dpa_model_30 = DeepPartitionEnsemble(model, ensemble_size=30)
Train the models on the poisoned data
model.fit(pdata, plabels, nb_epochs=10)
dpa_model_10.fit(pdata, plabels, nb_epochs=10)
dpa_model_20.fit(pdata, plabels, nb_epochs=10)
dpa_model_30.fit(pdata, plabels, nb_epochs=10)
Train on 10000 samples Epoch 1/10 10000/10000 [==============================] - 1s 106us/sample - loss: 0.6702 - accuracy: 0.7852 Epoch 2/10 10000/10000 [==============================] - 1s 52us/sample - loss: 0.2179 - accuracy: 0.9353 Epoch 3/10 10000/10000 [==============================] - 1s 53us/sample - loss: 0.1370 - accuracy: 0.9567 Epoch 4/10 10000/10000 [==============================] - 1s 51us/sample - loss: 0.1018 - accuracy: 0.9684 Epoch 5/10 10000/10000 [==============================] - 1s 51us/sample - loss: 0.0778 - accuracy: 0.9766 Epoch 6/10 10000/10000 [==============================] - 1s 51us/sample - loss: 0.0661 - accuracy: 0.9783 Epoch 7/10 10000/10000 [==============================] - 1s 51us/sample - loss: 0.0558 - accuracy: 0.9822 Epoch 8/10 10000/10000 [==============================] - 1s 50us/sample - loss: 0.0510 - accuracy: 0.9820 Epoch 9/10 10000/10000 [==============================] - 1s 51us/sample - loss: 0.0435 - accuracy: 0.9862 Epoch 10/10 10000/10000 [==============================] - 1s 50us/sample - loss: 0.0375 - accuracy: 0.9885 Train on 977 samples Epoch 1/10 977/977 [==============================] - 7s 7ms/sample - loss: 1.9011 - accuracy: 0.3429 Epoch 2/10 977/977 [==============================] - 0s 53us/sample - loss: 1.0015 - accuracy: 0.6817 Epoch 3/10 977/977 [==============================] - 0s 52us/sample - loss: 0.6282 - accuracy: 0.7892 Epoch 4/10 977/977 [==============================] - 0s 51us/sample - loss: 0.4957 - accuracy: 0.8352 Epoch 5/10 977/977 [==============================] - 0s 52us/sample - loss: 0.3679 - accuracy: 0.8731 Epoch 6/10 977/977 [==============================] - 0s 51us/sample - loss: 0.3122 - accuracy: 0.8864 Epoch 7/10 977/977 [==============================] - 0s 54us/sample - loss: 0.2489 - accuracy: 0.9161 Epoch 8/10 977/977 [==============================] - 0s 56us/sample - loss: 0.2032 - accuracy: 0.9355 Epoch 9/10 977/977 [==============================] - 0s 54us/sample - loss: 0.1624 - accuracy: 0.9427 Epoch 10/10 977/977 [==============================] - 0s 52us/sample - loss: 0.1518 - accuracy: 0.9509 Train on 992 samples Epoch 1/10 992/992 [==============================] - 7s 7ms/sample - loss: 1.9655 - accuracy: 0.3276 Epoch 2/10 992/992 [==============================] - 0s 54us/sample - loss: 0.9691 - accuracy: 0.6905 Epoch 3/10 992/992 [==============================] - 0s 52us/sample - loss: 0.6556 - accuracy: 0.7671 Epoch 4/10 992/992 [==============================] - 0s 52us/sample - loss: 0.4811 - accuracy: 0.8367 Epoch 5/10 992/992 [==============================] - 0s 52us/sample - loss: 0.3704 - accuracy: 0.8810 Epoch 6/10 992/992 [==============================] - 0s 52us/sample - loss: 0.3440 - accuracy: 0.8901 Epoch 7/10 992/992 [==============================] - 0s 52us/sample - loss: 0.2679 - accuracy: 0.9173 Epoch 8/10 992/992 [==============================] - 0s 53us/sample - loss: 0.2276 - accuracy: 0.9284 Epoch 9/10 992/992 [==============================] - 0s 52us/sample - loss: 0.1983 - accuracy: 0.9294 Epoch 10/10 992/992 [==============================] - 0s 52us/sample - loss: 0.1449 - accuracy: 0.9607 Train on 1005 samples Epoch 1/10 1005/1005 [==============================] - 7s 7ms/sample - loss: 1.8687 - accuracy: 0.4070 Epoch 2/10 1005/1005 [==============================] - 0s 59us/sample - loss: 0.9425 - accuracy: 0.7045 Epoch 3/10 1005/1005 [==============================] - 0s 51us/sample - loss: 0.6594 - accuracy: 0.7930 Epoch 4/10 1005/1005 [==============================] - 0s 60us/sample - loss: 0.5096 - accuracy: 0.8378 Epoch 5/10 1005/1005 [==============================] - 0s 52us/sample - loss: 0.4274 - accuracy: 0.8527 Epoch 6/10 1005/1005 [==============================] - 0s 52us/sample - loss: 0.3317 - accuracy: 0.8866 Epoch 7/10 1005/1005 [==============================] - 0s 51us/sample - loss: 0.3122 - accuracy: 0.9045 Epoch 8/10 1005/1005 [==============================] - 0s 53us/sample - loss: 0.2434 - accuracy: 0.9244 Epoch 9/10 1005/1005 [==============================] - 0s 52us/sample - loss: 0.1971 - accuracy: 0.9343 Epoch 10/10 1005/1005 [==============================] - 0s 52us/sample - loss: 0.1557 - accuracy: 0.9483 Train on 1087 samples Epoch 1/10 1087/1087 [==============================] - 7s 6ms/sample - loss: 1.8404 - accuracy: 0.3818 Epoch 2/10 1087/1087 [==============================] - 0s 55us/sample - loss: 0.9119 - accuracy: 0.7001 Epoch 3/10 1087/1087 [==============================] - 0s 52us/sample - loss: 0.5826 - accuracy: 0.8086 Epoch 4/10 1087/1087 [==============================] - 0s 55us/sample - loss: 0.4819 - accuracy: 0.8638 Epoch 5/10 1087/1087 [==============================] - 0s 54us/sample - loss: 0.3799 - accuracy: 0.8832 Epoch 6/10 1087/1087 [==============================] - 0s 53us/sample - loss: 0.2969 - accuracy: 0.9006 Epoch 7/10 1087/1087 [==============================] - 0s 51us/sample - loss: 0.2559 - accuracy: 0.9190 Epoch 8/10 1087/1087 [==============================] - 0s 53us/sample - loss: 0.2213 - accuracy: 0.9255 Epoch 9/10 1087/1087 [==============================] - 0s 52us/sample - loss: 0.1901 - accuracy: 0.9476 Epoch 10/10 1087/1087 [==============================] - 0s 52us/sample - loss: 0.1290 - accuracy: 0.9586 Train on 1000 samples Epoch 1/10 1000/1000 [==============================] - 7s 7ms/sample - loss: 1.8514 - accuracy: 0.3930 Epoch 2/10 1000/1000 [==============================] - 0s 54us/sample - loss: 0.9959 - accuracy: 0.6640 Epoch 3/10 1000/1000 [==============================] - 0s 53us/sample - loss: 0.6432 - accuracy: 0.7970 Epoch 4/10 1000/1000 [==============================] - 0s 66us/sample - loss: 0.5205 - accuracy: 0.8440 Epoch 5/10 1000/1000 [==============================] - 0s 54us/sample - loss: 0.4049 - accuracy: 0.8600 Epoch 6/10 1000/1000 [==============================] - 0s 52us/sample - loss: 0.3443 - accuracy: 0.8750 Epoch 7/10 1000/1000 [==============================] - 0s 53us/sample - loss: 0.2732 - accuracy: 0.9150 Epoch 8/10 1000/1000 [==============================] - 0s 55us/sample - loss: 0.2527 - accuracy: 0.9230 Epoch 9/10 1000/1000 [==============================] - 0s 51us/sample - loss: 0.2045 - accuracy: 0.9360 Epoch 10/10 1000/1000 [==============================] - 0s 62us/sample - loss: 0.1627 - accuracy: 0.9570 Train on 976 samples Epoch 1/10 976/976 [==============================] - 7s 7ms/sample - loss: 1.8847 - accuracy: 0.3945 Epoch 2/10 976/976 [==============================] - 0s 54us/sample - loss: 0.9502 - accuracy: 0.6957 Epoch 3/10 976/976 [==============================] - 0s 53us/sample - loss: 0.6427 - accuracy: 0.7859 Epoch 4/10 976/976 [==============================] - 0s 59us/sample - loss: 0.4635 - accuracy: 0.8545 Epoch 5/10 976/976 [==============================] - 0s 53us/sample - loss: 0.3932 - accuracy: 0.8842 Epoch 6/10 976/976 [==============================] - 0s 52us/sample - loss: 0.3295 - accuracy: 0.8975 Epoch 7/10 976/976 [==============================] - 0s 54us/sample - loss: 0.2788 - accuracy: 0.9109 Epoch 8/10 976/976 [==============================] - 0s 53us/sample - loss: 0.1914 - accuracy: 0.9457 Epoch 9/10 976/976 [==============================] - 0s 52us/sample - loss: 0.1786 - accuracy: 0.9508 Epoch 10/10 976/976 [==============================] - 0s 54us/sample - loss: 0.1445 - accuracy: 0.9559 Train on 964 samples Epoch 1/10 964/964 [==============================] - 7s 7ms/sample - loss: 1.9007 - accuracy: 0.3444 Epoch 2/10 964/964 [==============================] - 0s 55us/sample - loss: 0.9441 - accuracy: 0.6836 Epoch 3/10 964/964 [==============================] - 0s 53us/sample - loss: 0.6456 - accuracy: 0.7801 Epoch 4/10 964/964 [==============================] - 0s 53us/sample - loss: 0.5009 - accuracy: 0.8330 Epoch 5/10 964/964 [==============================] - 0s 53us/sample - loss: 0.4053 - accuracy: 0.8859 Epoch 6/10 964/964 [==============================] - 0s 56us/sample - loss: 0.3883 - accuracy: 0.8900 Epoch 7/10 964/964 [==============================] - 0s 53us/sample - loss: 0.2921 - accuracy: 0.9077 Epoch 8/10 964/964 [==============================] - 0s 52us/sample - loss: 0.2208 - accuracy: 0.9315 Epoch 9/10 964/964 [==============================] - 0s 53us/sample - loss: 0.2089 - accuracy: 0.9305 Epoch 10/10 964/964 [==============================] - 0s 52us/sample - loss: 0.1801 - accuracy: 0.9492 Train on 1014 samples Epoch 1/10 1014/1014 [==============================] - 7s 7ms/sample - loss: 1.8226 - accuracy: 0.4162 Epoch 2/10 1014/1014 [==============================] - 0s 56us/sample - loss: 0.9429 - accuracy: 0.6874 Epoch 3/10 1014/1014 [==============================] - 0s 52us/sample - loss: 0.6000 - accuracy: 0.8116 Epoch 4/10 1014/1014 [==============================] - 0s 50us/sample - loss: 0.4649 - accuracy: 0.8462 Epoch 5/10 1014/1014 [==============================] - 0s 50us/sample - loss: 0.3840 - accuracy: 0.8738 Epoch 6/10 1014/1014 [==============================] - 0s 52us/sample - loss: 0.3062 - accuracy: 0.9004 Epoch 7/10 1014/1014 [==============================] - 0s 50us/sample - loss: 0.2574 - accuracy: 0.9181 Epoch 8/10 1014/1014 [==============================] - 0s 51us/sample - loss: 0.2208 - accuracy: 0.9320 Epoch 9/10 1014/1014 [==============================] - 0s 51us/sample - loss: 0.1951 - accuracy: 0.9310 Epoch 10/10 1014/1014 [==============================] - 0s 52us/sample - loss: 0.1333 - accuracy: 0.9596 Train on 1029 samples Epoch 1/10 1029/1029 [==============================] - 7s 7ms/sample - loss: 1.8513 - accuracy: 0.3965 Epoch 2/10 1029/1029 [==============================] - 0s 57us/sample - loss: 0.9767 - accuracy: 0.6812 Epoch 3/10 1029/1029 [==============================] - 0s 55us/sample - loss: 0.6929 - accuracy: 0.7697 Epoch 4/10 1029/1029 [==============================] - 0s 55us/sample - loss: 0.5566 - accuracy: 0.8241 Epoch 5/10 1029/1029 [==============================] - 0s 53us/sample - loss: 0.4355 - accuracy: 0.8591 Epoch 6/10 1029/1029 [==============================] - 0s 54us/sample - loss: 0.3800 - accuracy: 0.8785 Epoch 7/10 1029/1029 [==============================] - 0s 54us/sample - loss: 0.3067 - accuracy: 0.9116 Epoch 8/10 1029/1029 [==============================] - 0s 53us/sample - loss: 0.2842 - accuracy: 0.9116 Epoch 9/10 1029/1029 [==============================] - 0s 54us/sample - loss: 0.2307 - accuracy: 0.9329 Epoch 10/10 1029/1029 [==============================] - 0s 56us/sample - loss: 0.2048 - accuracy: 0.9320 Train on 956 samples Epoch 1/10 956/956 [==============================] - 7s 8ms/sample - loss: 1.8804 - accuracy: 0.3954 Epoch 2/10 956/956 [==============================] - 0s 54us/sample - loss: 0.9341 - accuracy: 0.6799 Epoch 3/10 956/956 [==============================] - 0s 52us/sample - loss: 0.6392 - accuracy: 0.7887 Epoch 4/10 956/956 [==============================] - 0s 52us/sample - loss: 0.5189 - accuracy: 0.8274 Epoch 5/10 956/956 [==============================] - 0s 53us/sample - loss: 0.4177 - accuracy: 0.8797 Epoch 6/10 956/956 [==============================] - 0s 53us/sample - loss: 0.3175 - accuracy: 0.9006 Epoch 7/10 956/956 [==============================] - 0s 53us/sample - loss: 0.2653 - accuracy: 0.9226 Epoch 8/10 956/956 [==============================] - 0s 53us/sample - loss: 0.2252 - accuracy: 0.9289 Epoch 9/10 956/956 [==============================] - 0s 52us/sample - loss: 0.1760 - accuracy: 0.9498 Epoch 10/10 956/956 [==============================] - 0s 52us/sample - loss: 0.1257 - accuracy: 0.9676 Train on 473 samples Epoch 1/10 473/473 [==============================] - 7s 16ms/sample - loss: 2.1809 - accuracy: 0.1649 Epoch 2/10 473/473 [==============================] - 0s 58us/sample - loss: 1.5440 - accuracy: 0.5814 Epoch 3/10 473/473 [==============================] - 0s 54us/sample - loss: 1.0021 - accuracy: 0.6892 Epoch 4/10 473/473 [==============================] - 0s 56us/sample - loss: 0.7427 - accuracy: 0.7696 Epoch 5/10 473/473 [==============================] - 0s 53us/sample - loss: 0.5753 - accuracy: 0.8245 Epoch 6/10 473/473 [==============================] - 0s 55us/sample - loss: 0.4381 - accuracy: 0.8605 Epoch 7/10 473/473 [==============================] - 0s 54us/sample - loss: 0.3848 - accuracy: 0.8689 Epoch 8/10 473/473 [==============================] - 0s 54us/sample - loss: 0.3077 - accuracy: 0.9049 Epoch 9/10 473/473 [==============================] - 0s 54us/sample - loss: 0.2377 - accuracy: 0.9260 Epoch 10/10 473/473 [==============================] - 0s 52us/sample - loss: 0.2671 - accuracy: 0.9006 Train on 493 samples Epoch 1/10 493/493 [==============================] - 1s 1ms/sample - loss: 2.1469 - accuracy: 0.2272 Epoch 2/10 493/493 [==============================] - 0s 55us/sample - loss: 1.4709 - accuracy: 0.5943 Epoch 3/10 493/493 [==============================] - 0s 53us/sample - loss: 0.9855 - accuracy: 0.6876 Epoch 4/10 493/493 [==============================] - 0s 54us/sample - loss: 0.7909 - accuracy: 0.7465 Epoch 5/10 493/493 [==============================] - 0s 54us/sample - loss: 0.6112 - accuracy: 0.8073 Epoch 6/10 493/493 [==============================] - 0s 53us/sample - loss: 0.5063 - accuracy: 0.8499 Epoch 7/10 493/493 [==============================] - 0s 54us/sample - loss: 0.3887 - accuracy: 0.8905 Epoch 8/10 493/493 [==============================] - 0s 57us/sample - loss: 0.3509 - accuracy: 0.8884 Epoch 9/10 493/493 [==============================] - 0s 53us/sample - loss: 0.3062 - accuracy: 0.9087 Epoch 10/10 493/493 [==============================] - 0s 53us/sample - loss: 0.2519 - accuracy: 0.9310 Train on 511 samples Epoch 1/10 511/511 [==============================] - 8s 15ms/sample - loss: 2.1587 - accuracy: 0.2524 Epoch 2/10 511/511 [==============================] - 0s 56us/sample - loss: 1.5182 - accuracy: 0.5910 Epoch 3/10 511/511 [==============================] - 0s 56us/sample - loss: 0.9522 - accuracy: 0.7025 Epoch 4/10 511/511 [==============================] - 0s 53us/sample - loss: 0.7103 - accuracy: 0.7573 Epoch 5/10 511/511 [==============================] - 0s 53us/sample - loss: 0.6426 - accuracy: 0.8043 Epoch 6/10 511/511 [==============================] - 0s 53us/sample - loss: 0.5414 - accuracy: 0.8376 Epoch 7/10 511/511 [==============================] - 0s 53us/sample - loss: 0.4553 - accuracy: 0.8415 Epoch 8/10 511/511 [==============================] - 0s 54us/sample - loss: 0.4236 - accuracy: 0.8650 Epoch 9/10 511/511 [==============================] - 0s 54us/sample - loss: 0.3126 - accuracy: 0.8904 Epoch 10/10 511/511 [==============================] - 0s 60us/sample - loss: 0.3113 - accuracy: 0.8982 Train on 562 samples Epoch 1/10 562/562 [==============================] - 8s 14ms/sample - loss: 2.1335 - accuracy: 0.3007 Epoch 2/10 562/562 [==============================] - 0s 59us/sample - loss: 1.3796 - accuracy: 0.6103 Epoch 3/10 562/562 [==============================] - 0s 56us/sample - loss: 0.9748 - accuracy: 0.6922 Epoch 4/10 562/562 [==============================] - 0s 57us/sample - loss: 0.7408 - accuracy: 0.7562 Epoch 5/10 562/562 [==============================] - 0s 57us/sample - loss: 0.5678 - accuracy: 0.8114 Epoch 6/10 562/562 [==============================] - 0s 55us/sample - loss: 0.4847 - accuracy: 0.8470 Epoch 7/10 562/562 [==============================] - 0s 55us/sample - loss: 0.4089 - accuracy: 0.8683 Epoch 8/10 562/562 [==============================] - 0s 57us/sample - loss: 0.3535 - accuracy: 0.8843 Epoch 9/10 562/562 [==============================] - 0s 57us/sample - loss: 0.2846 - accuracy: 0.9075 Epoch 10/10 562/562 [==============================] - 0s 57us/sample - loss: 0.2524 - accuracy: 0.9181 Train on 510 samples Epoch 1/10 510/510 [==============================] - 8s 15ms/sample - loss: 2.1443 - accuracy: 0.2451 Epoch 2/10 510/510 [==============================] - 0s 55us/sample - loss: 1.4927 - accuracy: 0.5804 Epoch 3/10 510/510 [==============================] - 0s 53us/sample - loss: 1.0005 - accuracy: 0.6765 Epoch 4/10 510/510 [==============================] - 0s 52us/sample - loss: 0.7577 - accuracy: 0.7373 Epoch 5/10 510/510 [==============================] - 0s 52us/sample - loss: 0.5855 - accuracy: 0.8275 Epoch 6/10 510/510 [==============================] - 0s 53us/sample - loss: 0.4825 - accuracy: 0.8373 Epoch 7/10 510/510 [==============================] - 0s 58us/sample - loss: 0.4021 - accuracy: 0.8765 Epoch 8/10 510/510 [==============================] - 0s 53us/sample - loss: 0.3385 - accuracy: 0.8784 Epoch 9/10 510/510 [==============================] - 0s 52us/sample - loss: 0.2920 - accuracy: 0.9118 Epoch 10/10 510/510 [==============================] - 0s 52us/sample - loss: 0.2465 - accuracy: 0.9275 Train on 540 samples Epoch 1/10 540/540 [==============================] - 8s 14ms/sample - loss: 2.1399 - accuracy: 0.2907 Epoch 2/10 540/540 [==============================] - 0s 61us/sample - loss: 1.3855 - accuracy: 0.6037 Epoch 3/10 540/540 [==============================] - 0s 57us/sample - loss: 0.8968 - accuracy: 0.6889 Epoch 4/10 540/540 [==============================] - 0s 59us/sample - loss: 0.7184 - accuracy: 0.7667 Epoch 5/10 540/540 [==============================] - 0s 65us/sample - loss: 0.5614 - accuracy: 0.8278 Epoch 6/10 540/540 [==============================] - 0s 57us/sample - loss: 0.5385 - accuracy: 0.8093 Epoch 7/10 540/540 [==============================] - 0s 68us/sample - loss: 0.3907 - accuracy: 0.8667 Epoch 8/10 540/540 [==============================] - 0s 57us/sample - loss: 0.3501 - accuracy: 0.8889 Epoch 9/10 540/540 [==============================] - 0s 56us/sample - loss: 0.3064 - accuracy: 0.9074 Epoch 10/10 540/540 [==============================] - 0s 57us/sample - loss: 0.2511 - accuracy: 0.9167 Train on 458 samples Epoch 1/10 458/458 [==============================] - 8s 17ms/sample - loss: 2.1754 - accuracy: 0.2183 Epoch 2/10 458/458 [==============================] - 0s 59us/sample - loss: 1.5343 - accuracy: 0.5633 Epoch 3/10 458/458 [==============================] - 0s 56us/sample - loss: 1.0270 - accuracy: 0.6703 Epoch 4/10 458/458 [==============================] - 0s 57us/sample - loss: 0.8076 - accuracy: 0.7598 Epoch 5/10 458/458 [==============================] - 0s 57us/sample - loss: 0.6061 - accuracy: 0.8035 Epoch 6/10 458/458 [==============================] - 0s 55us/sample - loss: 0.5397 - accuracy: 0.8057 Epoch 7/10 458/458 [==============================] - 0s 55us/sample - loss: 0.4747 - accuracy: 0.8472 Epoch 8/10 458/458 [==============================] - 0s 55us/sample - loss: 0.4171 - accuracy: 0.8755 Epoch 9/10 458/458 [==============================] - 0s 55us/sample - loss: 0.3737 - accuracy: 0.8886 Epoch 10/10 458/458 [==============================] - 0s 55us/sample - loss: 0.3178 - accuracy: 0.9061 Train on 504 samples Epoch 1/10 504/504 [==============================] - 8s 15ms/sample - loss: 2.1662 - accuracy: 0.2361 Epoch 2/10 504/504 [==============================] - 0s 59us/sample - loss: 1.4684 - accuracy: 0.6468 Epoch 3/10 504/504 [==============================] - 0s 52us/sample - loss: 0.9344 - accuracy: 0.7103 Epoch 4/10 504/504 [==============================] - 0s 54us/sample - loss: 0.7055 - accuracy: 0.7778 Epoch 5/10 504/504 [==============================] - 0s 53us/sample - loss: 0.5763 - accuracy: 0.8175 Epoch 6/10 504/504 [==============================] - 0s 54us/sample - loss: 0.4725 - accuracy: 0.8552 Epoch 7/10 504/504 [==============================] - 0s 53us/sample - loss: 0.3873 - accuracy: 0.8968 Epoch 8/10 504/504 [==============================] - 0s 53us/sample - loss: 0.3294 - accuracy: 0.8929 Epoch 9/10 504/504 [==============================] - 0s 54us/sample - loss: 0.3092 - accuracy: 0.9067 Epoch 10/10 504/504 [==============================] - 0s 53us/sample - loss: 0.2785 - accuracy: 0.9008 Train on 515 samples Epoch 1/10 515/515 [==============================] - 8s 15ms/sample - loss: 2.1411 - accuracy: 0.2660 Epoch 2/10 515/515 [==============================] - 0s 61us/sample - loss: 1.4938 - accuracy: 0.5553 Epoch 3/10 515/515 [==============================] - 0s 60us/sample - loss: 1.1121 - accuracy: 0.6447 Epoch 4/10 515/515 [==============================] - 0s 59us/sample - loss: 0.8340 - accuracy: 0.7223 Epoch 5/10 515/515 [==============================] - 0s 61us/sample - loss: 0.6983 - accuracy: 0.7767 Epoch 6/10 515/515 [==============================] - 0s 60us/sample - loss: 0.5879 - accuracy: 0.8039 Epoch 7/10 515/515 [==============================] - 0s 63us/sample - loss: 0.5509 - accuracy: 0.8252 Epoch 8/10 515/515 [==============================] - 0s 59us/sample - loss: 0.5238 - accuracy: 0.8388 Epoch 9/10 515/515 [==============================] - 0s 59us/sample - loss: 0.4933 - accuracy: 0.8524 Epoch 10/10 515/515 [==============================] - 0s 59us/sample - loss: 0.3861 - accuracy: 0.8718 Train on 474 samples Epoch 1/10 474/474 [==============================] - 8s 17ms/sample - loss: 2.1533 - accuracy: 0.3038 Epoch 2/10 474/474 [==============================] - 0s 59us/sample - loss: 1.4620 - accuracy: 0.5992 Epoch 3/10 474/474 [==============================] - 0s 55us/sample - loss: 0.9472 - accuracy: 0.6899 Epoch 4/10 474/474 [==============================] - 0s 55us/sample - loss: 0.7755 - accuracy: 0.7384 Epoch 5/10 474/474 [==============================] - 0s 54us/sample - loss: 0.5711 - accuracy: 0.7932 Epoch 6/10 474/474 [==============================] - 0s 55us/sample - loss: 0.5215 - accuracy: 0.8439 Epoch 7/10 474/474 [==============================] - 0s 56us/sample - loss: 0.4137 - accuracy: 0.8797 Epoch 8/10 474/474 [==============================] - 0s 72us/sample - loss: 0.3107 - accuracy: 0.9072 Epoch 9/10 474/474 [==============================] - 0s 55us/sample - loss: 0.2880 - accuracy: 0.8987 Epoch 10/10 474/474 [==============================] - 0s 56us/sample - loss: 0.2661 - accuracy: 0.8945 Train on 504 samples Epoch 1/10 504/504 [==============================] - 1s 1ms/sample - loss: 2.1567 - accuracy: 0.2183 Epoch 2/10 504/504 [==============================] - 0s 54us/sample - loss: 1.5629 - accuracy: 0.5238 Epoch 3/10 504/504 [==============================] - 0s 64us/sample - loss: 0.9954 - accuracy: 0.6806 Epoch 4/10 504/504 [==============================] - 0s 53us/sample - loss: 0.7676 - accuracy: 0.7381 Epoch 5/10 504/504 [==============================] - 0s 54us/sample - loss: 0.6315 - accuracy: 0.7738 Epoch 6/10 504/504 [==============================] - 0s 54us/sample - loss: 0.4747 - accuracy: 0.8413 Epoch 7/10 504/504 [==============================] - 0s 53us/sample - loss: 0.4441 - accuracy: 0.8532 Epoch 8/10 504/504 [==============================] - 0s 54us/sample - loss: 0.3398 - accuracy: 0.8869 Epoch 9/10 504/504 [==============================] - 0s 55us/sample - loss: 0.3249 - accuracy: 0.8889 Epoch 10/10 504/504 [==============================] - 0s 55us/sample - loss: 0.2866 - accuracy: 0.9028 Train on 499 samples Epoch 1/10 499/499 [==============================] - 8s 16ms/sample - loss: 2.1409 - accuracy: 0.2766 Epoch 2/10 499/499 [==============================] - 0s 57us/sample - loss: 1.4840 - accuracy: 0.5671 Epoch 3/10 499/499 [==============================] - 0s 53us/sample - loss: 1.0183 - accuracy: 0.6713 Epoch 4/10 499/499 [==============================] - 0s 54us/sample - loss: 0.7745 - accuracy: 0.7415 Epoch 5/10 499/499 [==============================] - 0s 53us/sample - loss: 0.5848 - accuracy: 0.8176 Epoch 6/10 499/499 [==============================] - 0s 54us/sample - loss: 0.4338 - accuracy: 0.8838 Epoch 7/10 499/499 [==============================] - 0s 54us/sample - loss: 0.3783 - accuracy: 0.8878 Epoch 8/10 499/499 [==============================] - 0s 53us/sample - loss: 0.3259 - accuracy: 0.8918 Epoch 9/10 499/499 [==============================] - 0s 54us/sample - loss: 0.2636 - accuracy: 0.9218 Epoch 10/10 499/499 [==============================] - 0s 56us/sample - loss: 0.2292 - accuracy: 0.9259 Train on 494 samples Epoch 1/10 494/494 [==============================] - 8s 16ms/sample - loss: 2.1955 - accuracy: 0.1680 Epoch 2/10 494/494 [==============================] - 0s 58us/sample - loss: 1.5831 - accuracy: 0.5445 Epoch 3/10 494/494 [==============================] - 0s 55us/sample - loss: 0.9799 - accuracy: 0.6842 Epoch 4/10 494/494 [==============================] - 0s 55us/sample - loss: 0.7087 - accuracy: 0.7490 Epoch 5/10 494/494 [==============================] - 0s 57us/sample - loss: 0.5977 - accuracy: 0.8259 Epoch 6/10 494/494 [==============================] - 0s 54us/sample - loss: 0.4985 - accuracy: 0.8462 Epoch 7/10 494/494 [==============================] - 0s 55us/sample - loss: 0.4028 - accuracy: 0.8583 Epoch 8/10 494/494 [==============================] - 0s 55us/sample - loss: 0.3595 - accuracy: 0.8887 Epoch 9/10 494/494 [==============================] - 0s 55us/sample - loss: 0.3189 - accuracy: 0.8947 Epoch 10/10 494/494 [==============================] - 0s 56us/sample - loss: 0.2715 - accuracy: 0.9069 Train on 525 samples Epoch 1/10 525/525 [==============================] - 8s 16ms/sample - loss: 2.1822 - accuracy: 0.1981 Epoch 2/10 525/525 [==============================] - 0s 61us/sample - loss: 1.5962 - accuracy: 0.5410 Epoch 3/10 525/525 [==============================] - 0s 61us/sample - loss: 1.0687 - accuracy: 0.6552 Epoch 4/10 525/525 [==============================] - 0s 60us/sample - loss: 0.8098 - accuracy: 0.7333 Epoch 5/10 525/525 [==============================] - 0s 59us/sample - loss: 0.7363 - accuracy: 0.7695 Epoch 6/10 525/525 [==============================] - 0s 58us/sample - loss: 0.5887 - accuracy: 0.8190 Epoch 7/10 525/525 [==============================] - 0s 59us/sample - loss: 0.5066 - accuracy: 0.8419 Epoch 8/10 525/525 [==============================] - 0s 57us/sample - loss: 0.4558 - accuracy: 0.8667 Epoch 9/10 525/525 [==============================] - 0s 58us/sample - loss: 0.3741 - accuracy: 0.8933 Epoch 10/10 525/525 [==============================] - 0s 63us/sample - loss: 0.3409 - accuracy: 0.8914 Train on 490 samples Epoch 1/10 490/490 [==============================] - 8s 17ms/sample - loss: 2.1478 - accuracy: 0.2673 Epoch 2/10 490/490 [==============================] - 0s 60us/sample - loss: 1.4726 - accuracy: 0.5694 Epoch 3/10 490/490 [==============================] - 0s 54us/sample - loss: 1.0106 - accuracy: 0.6673 Epoch 4/10 490/490 [==============================] - 0s 56us/sample - loss: 0.6747 - accuracy: 0.7653 Epoch 5/10 490/490 [==============================] - 0s 55us/sample - loss: 0.5685 - accuracy: 0.7959 Epoch 6/10 490/490 [==============================] - 0s 55us/sample - loss: 0.4641 - accuracy: 0.8510 Epoch 7/10 490/490 [==============================] - 0s 56us/sample - loss: 0.3946 - accuracy: 0.8694 Epoch 8/10 490/490 [==============================] - 0s 54us/sample - loss: 0.3273 - accuracy: 0.8816 Epoch 9/10 490/490 [==============================] - 0s 55us/sample - loss: 0.2801 - accuracy: 0.9245 Epoch 10/10 490/490 [==============================] - 0s 54us/sample - loss: 0.2627 - accuracy: 0.9163 Train on 436 samples Epoch 1/10 436/436 [==============================] - 8s 19ms/sample - loss: 2.2061 - accuracy: 0.2339 Epoch 2/10 436/436 [==============================] - 0s 61us/sample - loss: 1.6643 - accuracy: 0.4908 Epoch 3/10 436/436 [==============================] - 0s 58us/sample - loss: 1.1070 - accuracy: 0.6697 Epoch 4/10 436/436 [==============================] - 0s 59us/sample - loss: 0.8987 - accuracy: 0.7225 Epoch 5/10 436/436 [==============================] - 0s 57us/sample - loss: 0.6979 - accuracy: 0.7615 Epoch 6/10 436/436 [==============================] - 0s 60us/sample - loss: 0.5736 - accuracy: 0.8303 Epoch 7/10 436/436 [==============================] - 0s 58us/sample - loss: 0.4599 - accuracy: 0.8647 Epoch 8/10 436/436 [==============================] - 0s 64us/sample - loss: 0.4453 - accuracy: 0.8624 Epoch 9/10 436/436 [==============================] - 0s 60us/sample - loss: 0.3667 - accuracy: 0.8739 Epoch 10/10 436/436 [==============================] - 0s 58us/sample - loss: 0.2991 - accuracy: 0.9014 Train on 506 samples Epoch 1/10 506/506 [==============================] - 8s 17ms/sample - loss: 2.1515 - accuracy: 0.2273 Epoch 2/10 506/506 [==============================] - 0s 58us/sample - loss: 1.4947 - accuracy: 0.5771 Epoch 3/10 506/506 [==============================] - 0s 56us/sample - loss: 1.0101 - accuracy: 0.6798 Epoch 4/10 506/506 [==============================] - 0s 55us/sample - loss: 0.7194 - accuracy: 0.7727 Epoch 5/10 506/506 [==============================] - 0s 56us/sample - loss: 0.4982 - accuracy: 0.8300 Epoch 6/10 506/506 [==============================] - 0s 54us/sample - loss: 0.4229 - accuracy: 0.8676 Epoch 7/10 506/506 [==============================] - 0s 54us/sample - loss: 0.4085 - accuracy: 0.8735 Epoch 8/10 506/506 [==============================] - 0s 69us/sample - loss: 0.3329 - accuracy: 0.8992 Epoch 9/10 506/506 [==============================] - 0s 53us/sample - loss: 0.2588 - accuracy: 0.9229 Epoch 10/10 506/506 [==============================] - 0s 54us/sample - loss: 0.2258 - accuracy: 0.9348 Train on 510 samples Epoch 1/10 510/510 [==============================] - 1s 1ms/sample - loss: 2.1504 - accuracy: 0.2706 Epoch 2/10 510/510 [==============================] - 0s 54us/sample - loss: 1.4914 - accuracy: 0.5765 Epoch 3/10 510/510 [==============================] - 0s 53us/sample - loss: 0.9789 - accuracy: 0.7078 Epoch 4/10 510/510 [==============================] - 0s 52us/sample - loss: 0.7227 - accuracy: 0.7510 Epoch 5/10 510/510 [==============================] - 0s 54us/sample - loss: 0.5537 - accuracy: 0.8157 Epoch 6/10 510/510 [==============================] - 0s 54us/sample - loss: 0.4117 - accuracy: 0.8863 Epoch 7/10 510/510 [==============================] - 0s 55us/sample - loss: 0.3780 - accuracy: 0.8706 Epoch 8/10 510/510 [==============================] - 0s 54us/sample - loss: 0.2962 - accuracy: 0.9000 Epoch 9/10 510/510 [==============================] - 0s 54us/sample - loss: 0.2469 - accuracy: 0.9176 Epoch 10/10 510/510 [==============================] - 0s 53us/sample - loss: 0.2382 - accuracy: 0.9118 Train on 514 samples Epoch 1/10 514/514 [==============================] - 8s 17ms/sample - loss: 2.1311 - accuracy: 0.2529 Epoch 2/10 514/514 [==============================] - 0s 66us/sample - loss: 1.5174 - accuracy: 0.4883 Epoch 3/10 514/514 [==============================] - 0s 61us/sample - loss: 1.1737 - accuracy: 0.6051 Epoch 4/10 514/514 [==============================] - 0s 60us/sample - loss: 0.9564 - accuracy: 0.6751 Epoch 5/10 514/514 [==============================] - 0s 59us/sample - loss: 0.7675 - accuracy: 0.7549 Epoch 6/10 514/514 [==============================] - 0s 61us/sample - loss: 0.7090 - accuracy: 0.7626 Epoch 7/10 514/514 [==============================] - 0s 82us/sample - loss: 0.5601 - accuracy: 0.8093 Epoch 8/10 514/514 [==============================] - 0s 61us/sample - loss: 0.4879 - accuracy: 0.8541 Epoch 9/10 514/514 [==============================] - 0s 59us/sample - loss: 0.4532 - accuracy: 0.8580 Epoch 10/10 514/514 [==============================] - 0s 61us/sample - loss: 0.4233 - accuracy: 0.8813 Train on 482 samples Epoch 1/10 482/482 [==============================] - 9s 18ms/sample - loss: 2.1805 - accuracy: 0.2531 Epoch 2/10 482/482 [==============================] - 0s 60us/sample - loss: 1.5490 - accuracy: 0.5581 Epoch 3/10 482/482 [==============================] - 0s 57us/sample - loss: 1.0985 - accuracy: 0.6286 Epoch 4/10 482/482 [==============================] - 0s 57us/sample - loss: 0.8298 - accuracy: 0.7241 Epoch 5/10 482/482 [==============================] - 0s 56us/sample - loss: 0.5945 - accuracy: 0.8008 Epoch 6/10 482/482 [==============================] - 0s 57us/sample - loss: 0.5225 - accuracy: 0.8423 Epoch 7/10 482/482 [==============================] - 0s 58us/sample - loss: 0.4254 - accuracy: 0.8693 Epoch 8/10 482/482 [==============================] - 0s 56us/sample - loss: 0.3584 - accuracy: 0.8776 Epoch 9/10 482/482 [==============================] - 0s 57us/sample - loss: 0.3316 - accuracy: 0.8880 Epoch 10/10 482/482 [==============================] - 0s 55us/sample - loss: 0.2440 - accuracy: 0.9378 Train on 338 samples Epoch 1/10 338/338 [==============================] - 9s 25ms/sample - loss: 2.2088 - accuracy: 0.2189 Epoch 2/10 338/338 [==============================] - 0s 65us/sample - loss: 1.7714 - accuracy: 0.4438 Epoch 3/10 338/338 [==============================] - 0s 59us/sample - loss: 1.2951 - accuracy: 0.5947 Epoch 4/10 338/338 [==============================] - 0s 59us/sample - loss: 0.9404 - accuracy: 0.7160 Epoch 5/10 338/338 [==============================] - 0s 59us/sample - loss: 0.7767 - accuracy: 0.7456 Epoch 6/10 338/338 [==============================] - 0s 58us/sample - loss: 0.5287 - accuracy: 0.8314 Epoch 7/10 338/338 [==============================] - 0s 58us/sample - loss: 0.4792 - accuracy: 0.8284 Epoch 8/10 338/338 [==============================] - 0s 58us/sample - loss: 0.3464 - accuracy: 0.8846 Epoch 9/10 338/338 [==============================] - 0s 58us/sample - loss: 0.3205 - accuracy: 0.8905 Epoch 10/10 338/338 [==============================] - 0s 60us/sample - loss: 0.3031 - accuracy: 0.8817 Train on 318 samples Epoch 1/10 318/318 [==============================] - 9s 27ms/sample - loss: 2.2445 - accuracy: 0.1761 Epoch 2/10 318/318 [==============================] - 0s 67us/sample - loss: 1.7898 - accuracy: 0.4969 Epoch 3/10 318/318 [==============================] - 0s 62us/sample - loss: 1.2530 - accuracy: 0.6478 Epoch 4/10 318/318 [==============================] - 0s 61us/sample - loss: 1.0756 - accuracy: 0.6289 Epoch 5/10 318/318 [==============================] - 0s 60us/sample - loss: 0.8333 - accuracy: 0.7233 Epoch 6/10 318/318 [==============================] - 0s 64us/sample - loss: 0.6580 - accuracy: 0.7704 Epoch 7/10 318/318 [==============================] - 0s 61us/sample - loss: 0.5656 - accuracy: 0.8113 Epoch 8/10 318/318 [==============================] - 0s 63us/sample - loss: 0.4813 - accuracy: 0.8396 Epoch 9/10 318/318 [==============================] - 0s 67us/sample - loss: 0.4491 - accuracy: 0.8711 Epoch 10/10 318/318 [==============================] - 0s 63us/sample - loss: 0.3618 - accuracy: 0.8962 Train on 335 samples Epoch 1/10 335/335 [==============================] - 9s 26ms/sample - loss: 2.2123 - accuracy: 0.1970 Epoch 2/10 335/335 [==============================] - 0s 65us/sample - loss: 1.8210 - accuracy: 0.3821 Epoch 3/10 335/335 [==============================] - 0s 59us/sample - loss: 1.3212 - accuracy: 0.6179 Epoch 4/10 335/335 [==============================] - 0s 71us/sample - loss: 0.9346 - accuracy: 0.6896 Epoch 5/10 335/335 [==============================] - 0s 60us/sample - loss: 0.7993 - accuracy: 0.7343 Epoch 6/10 335/335 [==============================] - 0s 61us/sample - loss: 0.6540 - accuracy: 0.7970 Epoch 7/10 335/335 [==============================] - 0s 59us/sample - loss: 0.5595 - accuracy: 0.8179 Epoch 8/10 335/335 [==============================] - 0s 69us/sample - loss: 0.4867 - accuracy: 0.8716 Epoch 9/10 335/335 [==============================] - 0s 59us/sample - loss: 0.4078 - accuracy: 0.8627 Epoch 10/10 335/335 [==============================] - 0s 64us/sample - loss: 0.3882 - accuracy: 0.8896 Train on 372 samples Epoch 1/10 372/372 [==============================] - 9s 24ms/sample - loss: 2.2522 - accuracy: 0.1720 Epoch 2/10 372/372 [==============================] - 0s 60us/sample - loss: 1.8264 - accuracy: 0.5054 Epoch 3/10 372/372 [==============================] - 0s 56us/sample - loss: 1.3457 - accuracy: 0.6183 Epoch 4/10 372/372 [==============================] - 0s 56us/sample - loss: 1.0196 - accuracy: 0.6694 Epoch 5/10 372/372 [==============================] - 0s 56us/sample - loss: 0.7542 - accuracy: 0.7446 Epoch 6/10 372/372 [==============================] - 0s 56us/sample - loss: 0.6572 - accuracy: 0.7876 Epoch 7/10 372/372 [==============================] - 0s 56us/sample - loss: 0.4672 - accuracy: 0.8763 Epoch 8/10 372/372 [==============================] - 0s 85us/sample - loss: 0.4436 - accuracy: 0.8629 Epoch 9/10 372/372 [==============================] - 0s 57us/sample - loss: 0.3556 - accuracy: 0.9005 Epoch 10/10 372/372 [==============================] - 0s 57us/sample - loss: 0.3038 - accuracy: 0.9167 Train on 342 samples Epoch 1/10 342/342 [==============================] - 9s 26ms/sample - loss: 2.2220 - accuracy: 0.2368 Epoch 2/10 342/342 [==============================] - 0s 64us/sample - loss: 1.7808 - accuracy: 0.5146 Epoch 3/10 342/342 [==============================] - 0s 58us/sample - loss: 1.2565 - accuracy: 0.6433 Epoch 4/10 342/342 [==============================] - 0s 60us/sample - loss: 0.9451 - accuracy: 0.6842 Epoch 5/10 342/342 [==============================] - 0s 59us/sample - loss: 0.7607 - accuracy: 0.7339 Epoch 6/10 342/342 [==============================] - 0s 57us/sample - loss: 0.6507 - accuracy: 0.7953 Epoch 7/10 342/342 [==============================] - 0s 57us/sample - loss: 0.5249 - accuracy: 0.8216 Epoch 8/10 342/342 [==============================] - 0s 58us/sample - loss: 0.4956 - accuracy: 0.8216 Epoch 9/10 342/342 [==============================] - 0s 58us/sample - loss: 0.3944 - accuracy: 0.8509 Epoch 10/10 342/342 [==============================] - 0s 58us/sample - loss: 0.3334 - accuracy: 0.8918 Train on 325 samples Epoch 1/10 325/325 [==============================] - 9s 27ms/sample - loss: 2.2378 - accuracy: 0.2215 Epoch 2/10 325/325 [==============================] - 0s 65us/sample - loss: 1.7701 - accuracy: 0.5108 Epoch 3/10 325/325 [==============================] - 0s 62us/sample - loss: 1.2641 - accuracy: 0.6646 Epoch 4/10 325/325 [==============================] - 0s 60us/sample - loss: 0.9989 - accuracy: 0.6738 Epoch 5/10 325/325 [==============================] - 0s 61us/sample - loss: 0.7344 - accuracy: 0.7662 Epoch 6/10 325/325 [==============================] - 0s 60us/sample - loss: 0.6490 - accuracy: 0.7877 Epoch 7/10 325/325 [==============================] - 0s 62us/sample - loss: 0.5303 - accuracy: 0.8554 Epoch 8/10 325/325 [==============================] - 0s 60us/sample - loss: 0.4490 - accuracy: 0.8677 Epoch 9/10 325/325 [==============================] - 0s 63us/sample - loss: 0.4094 - accuracy: 0.8769 Epoch 10/10 325/325 [==============================] - 0s 61us/sample - loss: 0.3876 - accuracy: 0.8769 Train on 302 samples Epoch 1/10 302/302 [==============================] - 9s 30ms/sample - loss: 2.2317 - accuracy: 0.1490 Epoch 2/10 302/302 [==============================] - 0s 73us/sample - loss: 1.8106 - accuracy: 0.3907 Epoch 3/10 302/302 [==============================] - 0s 62us/sample - loss: 1.2261 - accuracy: 0.6689 Epoch 4/10 302/302 [==============================] - 0s 61us/sample - loss: 0.9943 - accuracy: 0.7053 Epoch 5/10 302/302 [==============================] - 0s 64us/sample - loss: 0.7917 - accuracy: 0.7318 Epoch 6/10 302/302 [==============================] - 0s 101us/sample - loss: 0.6734 - accuracy: 0.7848 Epoch 7/10 302/302 [==============================] - 0s 62us/sample - loss: 0.5752 - accuracy: 0.8212 Epoch 8/10 302/302 [==============================] - 0s 63us/sample - loss: 0.4797 - accuracy: 0.8742 Epoch 9/10 302/302 [==============================] - 0s 66us/sample - loss: 0.4404 - accuracy: 0.8642 Epoch 10/10 302/302 [==============================] - 0s 65us/sample - loss: 0.3985 - accuracy: 0.8742 Train on 353 samples Epoch 1/10 353/353 [==============================] - 9s 26ms/sample - loss: 2.2223 - accuracy: 0.2521 Epoch 2/10 353/353 [==============================] - 0s 61us/sample - loss: 1.7660 - accuracy: 0.5581 Epoch 3/10 353/353 [==============================] - 0s 59us/sample - loss: 1.2050 - accuracy: 0.6827 Epoch 4/10 353/353 [==============================] - 0s 62us/sample - loss: 0.9564 - accuracy: 0.6884 Epoch 5/10 353/353 [==============================] - 0s 62us/sample - loss: 0.7825 - accuracy: 0.7422 Epoch 6/10 353/353 [==============================] - 0s 59us/sample - loss: 0.6460 - accuracy: 0.8074 Epoch 7/10 353/353 [==============================] - 0s 58us/sample - loss: 0.4682 - accuracy: 0.8612 Epoch 8/10 353/353 [==============================] - 0s 58us/sample - loss: 0.4133 - accuracy: 0.8640 Epoch 9/10 353/353 [==============================] - 0s 57us/sample - loss: 0.4101 - accuracy: 0.8754 Epoch 10/10 353/353 [==============================] - 0s 59us/sample - loss: 0.2985 - accuracy: 0.8980 Train on 372 samples Epoch 1/10 372/372 [==============================] - 1s 2ms/sample - loss: 2.2181 - accuracy: 0.1909 Epoch 2/10 372/372 [==============================] - 0s 57us/sample - loss: 1.7898 - accuracy: 0.5054 Epoch 3/10 372/372 [==============================] - 0s 57us/sample - loss: 1.2460 - accuracy: 0.6344 Epoch 4/10 372/372 [==============================] - 0s 78us/sample - loss: 0.8714 - accuracy: 0.7070 Epoch 5/10 372/372 [==============================] - 0s 58us/sample - loss: 0.7682 - accuracy: 0.7446 Epoch 6/10 372/372 [==============================] - 0s 58us/sample - loss: 0.6201 - accuracy: 0.8145 Epoch 7/10 372/372 [==============================] - 0s 74us/sample - loss: 0.4564 - accuracy: 0.8575 Epoch 8/10 372/372 [==============================] - 0s 57us/sample - loss: 0.4243 - accuracy: 0.8710 Epoch 9/10 372/372 [==============================] - 0s 57us/sample - loss: 0.3629 - accuracy: 0.8817 Epoch 10/10 372/372 [==============================] - 0s 57us/sample - loss: 0.3140 - accuracy: 0.9005 Train on 316 samples Epoch 1/10 316/316 [==============================] - 1s 3ms/sample - loss: 2.2441 - accuracy: 0.1930 Epoch 2/10 316/316 [==============================] - 0s 62us/sample - loss: 1.8004 - accuracy: 0.5411 Epoch 3/10 316/316 [==============================] - 0s 71us/sample - loss: 1.2554 - accuracy: 0.6551 Epoch 4/10 316/316 [==============================] - 0s 61us/sample - loss: 0.9692 - accuracy: 0.6741 Epoch 5/10 316/316 [==============================] - 0s 59us/sample - loss: 0.6988 - accuracy: 0.7500 Epoch 6/10 316/316 [==============================] - 0s 62us/sample - loss: 0.6024 - accuracy: 0.7880 Epoch 7/10 316/316 [==============================] - 0s 61us/sample - loss: 0.4752 - accuracy: 0.8386 Epoch 8/10 316/316 [==============================] - 0s 61us/sample - loss: 0.4254 - accuracy: 0.8481 Epoch 9/10 316/316 [==============================] - 0s 60us/sample - loss: 0.3399 - accuracy: 0.8956 Epoch 10/10 316/316 [==============================] - 0s 76us/sample - loss: 0.2933 - accuracy: 0.9051 Train on 303 samples Epoch 1/10 303/303 [==============================] - 9s 31ms/sample - loss: 2.2222 - accuracy: 0.2112 Epoch 2/10 303/303 [==============================] - 0s 66us/sample - loss: 1.8643 - accuracy: 0.3894 Epoch 3/10 303/303 [==============================] - 0s 62us/sample - loss: 1.3138 - accuracy: 0.6073 Epoch 4/10 303/303 [==============================] - 0s 63us/sample - loss: 1.0035 - accuracy: 0.6502 Epoch 5/10 303/303 [==============================] - 0s 64us/sample - loss: 0.7907 - accuracy: 0.7393 Epoch 6/10 303/303 [==============================] - 0s 65us/sample - loss: 0.7577 - accuracy: 0.7360 Epoch 7/10 303/303 [==============================] - 0s 61us/sample - loss: 0.5716 - accuracy: 0.7921 Epoch 8/10 303/303 [==============================] - 0s 62us/sample - loss: 0.4851 - accuracy: 0.8185 Epoch 9/10 303/303 [==============================] - 0s 62us/sample - loss: 0.4291 - accuracy: 0.8680 Epoch 10/10 303/303 [==============================] - 0s 61us/sample - loss: 0.3950 - accuracy: 0.8647 Train on 358 samples Epoch 1/10 358/358 [==============================] - 9s 26ms/sample - loss: 2.2115 - accuracy: 0.2151 Epoch 2/10 358/358 [==============================] - 0s 60us/sample - loss: 1.7202 - accuracy: 0.4749 Epoch 3/10 358/358 [==============================] - 0s 59us/sample - loss: 1.1902 - accuracy: 0.6648 Epoch 4/10 358/358 [==============================] - 0s 60us/sample - loss: 0.8767 - accuracy: 0.7151 Epoch 5/10 358/358 [==============================] - 0s 58us/sample - loss: 0.7464 - accuracy: 0.7374 Epoch 6/10 358/358 [==============================] - 0s 58us/sample - loss: 0.5313 - accuracy: 0.8101 Epoch 7/10 358/358 [==============================] - 0s 56us/sample - loss: 0.4247 - accuracy: 0.8743 Epoch 8/10 358/358 [==============================] - 0s 57us/sample - loss: 0.2820 - accuracy: 0.9190 Epoch 9/10 358/358 [==============================] - 0s 57us/sample - loss: 0.2371 - accuracy: 0.9162 Epoch 10/10 358/358 [==============================] - 0s 57us/sample - loss: 0.2120 - accuracy: 0.9246 Train on 346 samples Epoch 1/10 346/346 [==============================] - 1s 2ms/sample - loss: 2.2227 - accuracy: 0.2197 Epoch 2/10 346/346 [==============================] - 0s 60us/sample - loss: 1.7149 - accuracy: 0.5665 Epoch 3/10 346/346 [==============================] - 0s 58us/sample - loss: 1.2180 - accuracy: 0.6532 Epoch 4/10 346/346 [==============================] - 0s 58us/sample - loss: 0.9042 - accuracy: 0.7081 Epoch 5/10 346/346 [==============================] - 0s 57us/sample - loss: 0.6513 - accuracy: 0.7659 Epoch 6/10 346/346 [==============================] - 0s 59us/sample - loss: 0.6006 - accuracy: 0.8035 Epoch 7/10 346/346 [==============================] - 0s 59us/sample - loss: 0.4825 - accuracy: 0.8526 Epoch 8/10 346/346 [==============================] - 0s 58us/sample - loss: 0.4154 - accuracy: 0.8613 Epoch 9/10 346/346 [==============================] - 0s 58us/sample - loss: 0.3753 - accuracy: 0.8786 Epoch 10/10 346/346 [==============================] - 0s 59us/sample - loss: 0.3321 - accuracy: 0.8844 Train on 338 samples Epoch 1/10 338/338 [==============================] - 1s 2ms/sample - loss: 2.2238 - accuracy: 0.2249 Epoch 2/10 338/338 [==============================] - 0s 61us/sample - loss: 1.7818 - accuracy: 0.5207 Epoch 3/10 338/338 [==============================] - 0s 73us/sample - loss: 1.2761 - accuracy: 0.6361 Epoch 4/10 338/338 [==============================] - 0s 62us/sample - loss: 0.8656 - accuracy: 0.7367 Epoch 5/10 338/338 [==============================] - 0s 76us/sample - loss: 0.7510 - accuracy: 0.7574 Epoch 6/10 338/338 [==============================] - 0s 60us/sample - loss: 0.6583 - accuracy: 0.7988 Epoch 7/10 338/338 [==============================] - 0s 69us/sample - loss: 0.5113 - accuracy: 0.8373 Epoch 8/10 338/338 [==============================] - 0s 60us/sample - loss: 0.4455 - accuracy: 0.8521 Epoch 9/10 338/338 [==============================] - 0s 58us/sample - loss: 0.4286 - accuracy: 0.8521 Epoch 10/10 338/338 [==============================] - 0s 59us/sample - loss: 0.3545 - accuracy: 0.8846 Train on 310 samples Epoch 1/10 310/310 [==============================] - 9s 31ms/sample - loss: 2.2454 - accuracy: 0.1387 Epoch 2/10 310/310 [==============================] - 0s 68us/sample - loss: 1.8529 - accuracy: 0.4968 Epoch 3/10 310/310 [==============================] - 0s 64us/sample - loss: 1.3008 - accuracy: 0.6387 Epoch 4/10 310/310 [==============================] - 0s 62us/sample - loss: 1.0638 - accuracy: 0.6806 Epoch 5/10 310/310 [==============================] - 0s 64us/sample - loss: 0.8146 - accuracy: 0.7484 Epoch 6/10 310/310 [==============================] - 0s 62us/sample - loss: 0.6949 - accuracy: 0.7613 Epoch 7/10 310/310 [==============================] - 0s 64us/sample - loss: 0.5716 - accuracy: 0.8032 Epoch 8/10 310/310 [==============================] - 0s 63us/sample - loss: 0.5127 - accuracy: 0.8323 Epoch 9/10 310/310 [==============================] - 0s 64us/sample - loss: 0.4184 - accuracy: 0.8710 Epoch 10/10 310/310 [==============================] - 0s 63us/sample - loss: 0.3473 - accuracy: 0.8871 Train on 308 samples Epoch 1/10 308/308 [==============================] - 1s 3ms/sample - loss: 2.2314 - accuracy: 0.1851 Epoch 2/10 308/308 [==============================] - 0s 61us/sample - loss: 1.7775 - accuracy: 0.5162 Epoch 3/10 308/308 [==============================] - 0s 63us/sample - loss: 1.2734 - accuracy: 0.6396 Epoch 4/10 308/308 [==============================] - 0s 61us/sample - loss: 0.9276 - accuracy: 0.6981 Epoch 5/10 308/308 [==============================] - 0s 61us/sample - loss: 0.6764 - accuracy: 0.7857 Epoch 6/10 308/308 [==============================] - 0s 63us/sample - loss: 0.6220 - accuracy: 0.7500 Epoch 7/10 308/308 [==============================] - 0s 63us/sample - loss: 0.4707 - accuracy: 0.8442 Epoch 8/10 308/308 [==============================] - 0s 62us/sample - loss: 0.3935 - accuracy: 0.8636 Epoch 9/10 308/308 [==============================] - 0s 73us/sample - loss: 0.3467 - accuracy: 0.8994 Epoch 10/10 308/308 [==============================] - 0s 61us/sample - loss: 0.2742 - accuracy: 0.9123 Train on 345 samples Epoch 1/10 345/345 [==============================] - 1s 2ms/sample - loss: 2.2134 - accuracy: 0.2116 Epoch 2/10 345/345 [==============================] - 0s 60us/sample - loss: 1.7026 - accuracy: 0.5391 Epoch 3/10 345/345 [==============================] - 0s 58us/sample - loss: 1.0985 - accuracy: 0.6870 Epoch 4/10 345/345 [==============================] - 0s 61us/sample - loss: 0.7737 - accuracy: 0.7507 Epoch 5/10 345/345 [==============================] - 0s 58us/sample - loss: 0.6047 - accuracy: 0.8029 Epoch 6/10 345/345 [==============================] - 0s 59us/sample - loss: 0.4624 - accuracy: 0.8290 Epoch 7/10 345/345 [==============================] - 0s 60us/sample - loss: 0.3929 - accuracy: 0.8638 Epoch 8/10 345/345 [==============================] - 0s 59us/sample - loss: 0.3704 - accuracy: 0.8783 Epoch 9/10 345/345 [==============================] - 0s 58us/sample - loss: 0.2887 - accuracy: 0.9159 Epoch 10/10 345/345 [==============================] - 0s 59us/sample - loss: 0.2398 - accuracy: 0.9188 Train on 350 samples Epoch 1/10 350/350 [==============================] - 10s 28ms/sample - loss: 2.2163 - accuracy: 0.2143 Epoch 2/10 350/350 [==============================] - 0s 63us/sample - loss: 1.7309 - accuracy: 0.5457 Epoch 3/10 350/350 [==============================] - 0s 58us/sample - loss: 1.1825 - accuracy: 0.6314 Epoch 4/10 350/350 [==============================] - 0s 60us/sample - loss: 0.9737 - accuracy: 0.6543 Epoch 5/10 350/350 [==============================] - 0s 59us/sample - loss: 0.6912 - accuracy: 0.7800 Epoch 6/10 350/350 [==============================] - 0s 60us/sample - loss: 0.5510 - accuracy: 0.8171 Epoch 7/10 350/350 [==============================] - 0s 62us/sample - loss: 0.4774 - accuracy: 0.8457 Epoch 8/10 350/350 [==============================] - 0s 61us/sample - loss: 0.4374 - accuracy: 0.8657 Epoch 9/10 350/350 [==============================] - 0s 61us/sample - loss: 0.3833 - accuracy: 0.8714 Epoch 10/10 350/350 [==============================] - 0s 59us/sample - loss: 0.2975 - accuracy: 0.9057 Train on 321 samples Epoch 1/10 321/321 [==============================] - 10s 30ms/sample - loss: 2.2323 - accuracy: 0.2087 Epoch 2/10 321/321 [==============================] - 0s 68us/sample - loss: 1.7762 - accuracy: 0.4860 Epoch 3/10 321/321 [==============================] - 0s 63us/sample - loss: 1.3014 - accuracy: 0.6604 Epoch 4/10 321/321 [==============================] - 0s 62us/sample - loss: 0.9509 - accuracy: 0.7165 Epoch 5/10 321/321 [==============================] - 0s 62us/sample - loss: 0.7085 - accuracy: 0.7601 Epoch 6/10 321/321 [==============================] - 0s 60us/sample - loss: 0.6970 - accuracy: 0.7570 Epoch 7/10 321/321 [==============================] - 0s 61us/sample - loss: 0.4915 - accuracy: 0.8442 Epoch 8/10 321/321 [==============================] - 0s 66us/sample - loss: 0.4861 - accuracy: 0.8442 Epoch 9/10 321/321 [==============================] - 0s 63us/sample - loss: 0.4149 - accuracy: 0.8692 Epoch 10/10 321/321 [==============================] - 0s 62us/sample - loss: 0.3980 - accuracy: 0.8879 Train on 316 samples Epoch 1/10 316/316 [==============================] - 1s 3ms/sample - loss: 2.2252 - accuracy: 0.1551 Epoch 2/10 316/316 [==============================] - 0s 63us/sample - loss: 1.8059 - accuracy: 0.4462 Epoch 3/10 316/316 [==============================] - 0s 62us/sample - loss: 1.2688 - accuracy: 0.6519 Epoch 4/10 316/316 [==============================] - 0s 64us/sample - loss: 0.8890 - accuracy: 0.7342 Epoch 5/10 316/316 [==============================] - 0s 64us/sample - loss: 0.7274 - accuracy: 0.7437 Epoch 6/10 316/316 [==============================] - 0s 63us/sample - loss: 0.5688 - accuracy: 0.8259 Epoch 7/10 316/316 [==============================] - 0s 64us/sample - loss: 0.4736 - accuracy: 0.8354 Epoch 8/10 316/316 [==============================] - 0s 62us/sample - loss: 0.4139 - accuracy: 0.8386 Epoch 9/10 316/316 [==============================] - 0s 62us/sample - loss: 0.3449 - accuracy: 0.8829 Epoch 10/10 316/316 [==============================] - 0s 63us/sample - loss: 0.2655 - accuracy: 0.9241 Train on 336 samples Epoch 1/10 336/336 [==============================] - 1s 2ms/sample - loss: 2.2340 - accuracy: 0.1935 Epoch 2/10 336/336 [==============================] - 0s 61us/sample - loss: 1.8119 - accuracy: 0.4196 Epoch 3/10 336/336 [==============================] - 0s 61us/sample - loss: 1.2897 - accuracy: 0.6429 Epoch 4/10 336/336 [==============================] - 0s 60us/sample - loss: 0.9084 - accuracy: 0.7054 Epoch 5/10 336/336 [==============================] - 0s 59us/sample - loss: 0.7190 - accuracy: 0.8006 Epoch 6/10 336/336 [==============================] - 0s 59us/sample - loss: 0.5532 - accuracy: 0.8333 Epoch 7/10 336/336 [==============================] - 0s 62us/sample - loss: 0.5134 - accuracy: 0.8125 Epoch 8/10 336/336 [==============================] - 0s 60us/sample - loss: 0.4692 - accuracy: 0.8512 Epoch 9/10 336/336 [==============================] - 0s 62us/sample - loss: 0.3049 - accuracy: 0.9256 Epoch 10/10 336/336 [==============================] - 0s 65us/sample - loss: 0.3225 - accuracy: 0.8988 Train on 316 samples Epoch 1/10 316/316 [==============================] - 1s 3ms/sample - loss: 2.2395 - accuracy: 0.1487 Epoch 2/10 316/316 [==============================] - 0s 64us/sample - loss: 1.8217 - accuracy: 0.4146 Epoch 3/10 316/316 [==============================] - 0s 63us/sample - loss: 1.2942 - accuracy: 0.6108 Epoch 4/10 316/316 [==============================] - 0s 64us/sample - loss: 0.9850 - accuracy: 0.6867 Epoch 5/10 316/316 [==============================] - 0s 62us/sample - loss: 0.7828 - accuracy: 0.7532 Epoch 6/10 316/316 [==============================] - 0s 63us/sample - loss: 0.6011 - accuracy: 0.8101 Epoch 7/10 316/316 [==============================] - 0s 62us/sample - loss: 0.5086 - accuracy: 0.8418 Epoch 8/10 316/316 [==============================] - 0s 63us/sample - loss: 0.4250 - accuracy: 0.8734 Epoch 9/10 316/316 [==============================] - 0s 65us/sample - loss: 0.3876 - accuracy: 0.8734 Epoch 10/10 316/316 [==============================] - 0s 65us/sample - loss: 0.3333 - accuracy: 0.9082 Train on 324 samples Epoch 1/10 324/324 [==============================] - 1s 3ms/sample - loss: 2.2485 - accuracy: 0.1358 Epoch 2/10 324/324 [==============================] - 0s 64us/sample - loss: 1.8273 - accuracy: 0.4907 Epoch 3/10 324/324 [==============================] - 0s 62us/sample - loss: 1.3083 - accuracy: 0.6235 Epoch 4/10 324/324 [==============================] - 0s 60us/sample - loss: 0.8855 - accuracy: 0.7438 Epoch 5/10 324/324 [==============================] - 0s 60us/sample - loss: 0.7348 - accuracy: 0.7469 Epoch 6/10 324/324 [==============================] - 0s 65us/sample - loss: 0.6567 - accuracy: 0.7685 Epoch 7/10 324/324 [==============================] - 0s 63us/sample - loss: 0.4475 - accuracy: 0.8549 Epoch 8/10 324/324 [==============================] - 0s 61us/sample - loss: 0.4722 - accuracy: 0.8302 Epoch 9/10 324/324 [==============================] - 0s 61us/sample - loss: 0.3700 - accuracy: 0.8951 Epoch 10/10 324/324 [==============================] - 0s 59us/sample - loss: 0.3261 - accuracy: 0.9198 Train on 377 samples Epoch 1/10 377/377 [==============================] - 10s 27ms/sample - loss: 2.2325 - accuracy: 0.1777 Epoch 2/10 377/377 [==============================] - 0s 62us/sample - loss: 1.8040 - accuracy: 0.4775 Epoch 3/10 377/377 [==============================] - 0s 57us/sample - loss: 1.2591 - accuracy: 0.6605 Epoch 4/10 377/377 [==============================] - 0s 60us/sample - loss: 0.9453 - accuracy: 0.7003 Epoch 5/10 377/377 [==============================] - 0s 57us/sample - loss: 0.7164 - accuracy: 0.7241 Epoch 6/10 377/377 [==============================] - 0s 59us/sample - loss: 0.5858 - accuracy: 0.8276 Epoch 7/10 377/377 [==============================] - 0s 57us/sample - loss: 0.4412 - accuracy: 0.8621 Epoch 8/10 377/377 [==============================] - 0s 59us/sample - loss: 0.3762 - accuracy: 0.8647 Epoch 9/10 377/377 [==============================] - 0s 59us/sample - loss: 0.3873 - accuracy: 0.8568 Epoch 10/10 377/377 [==============================] - 0s 57us/sample - loss: 0.2809 - accuracy: 0.9072 Train on 348 samples Epoch 1/10 348/348 [==============================] - 10s 29ms/sample - loss: 2.2198 - accuracy: 0.2126 Epoch 2/10 348/348 [==============================] - 0s 64us/sample - loss: 1.7543 - accuracy: 0.4741 Epoch 3/10 348/348 [==============================] - 0s 61us/sample - loss: 1.2262 - accuracy: 0.6437 Epoch 4/10 348/348 [==============================] - 0s 62us/sample - loss: 0.9269 - accuracy: 0.6925 Epoch 5/10 348/348 [==============================] - 0s 63us/sample - loss: 0.7221 - accuracy: 0.7443 Epoch 6/10 348/348 [==============================] - 0s 63us/sample - loss: 0.6049 - accuracy: 0.7730 Epoch 7/10 348/348 [==============================] - 0s 61us/sample - loss: 0.5129 - accuracy: 0.8333 Epoch 8/10 348/348 [==============================] - 0s 60us/sample - loss: 0.4578 - accuracy: 0.8362 Epoch 9/10 348/348 [==============================] - 0s 80us/sample - loss: 0.3557 - accuracy: 0.8994 Epoch 10/10 348/348 [==============================] - 0s 60us/sample - loss: 0.2937 - accuracy: 0.9080 Train on 343 samples Epoch 1/10 343/343 [==============================] - 10s 30ms/sample - loss: 2.2447 - accuracy: 0.1691 Epoch 2/10 343/343 [==============================] - 0s 66us/sample - loss: 1.8162 - accuracy: 0.5044 Epoch 3/10 343/343 [==============================] - 0s 62us/sample - loss: 1.2891 - accuracy: 0.6443 Epoch 4/10 343/343 [==============================] - 0s 66us/sample - loss: 0.9185 - accuracy: 0.7114 Epoch 5/10 343/343 [==============================] - 0s 63us/sample - loss: 0.7428 - accuracy: 0.7755 Epoch 6/10 343/343 [==============================] - 0s 60us/sample - loss: 0.6220 - accuracy: 0.7843 Epoch 7/10 343/343 [==============================] - 0s 60us/sample - loss: 0.5590 - accuracy: 0.8134 Epoch 8/10 343/343 [==============================] - 0s 59us/sample - loss: 0.4537 - accuracy: 0.8338 Epoch 9/10 343/343 [==============================] - 0s 61us/sample - loss: 0.3820 - accuracy: 0.8892 Epoch 10/10 343/343 [==============================] - 0s 62us/sample - loss: 0.3269 - accuracy: 0.9009 Train on 317 samples Epoch 1/10 317/317 [==============================] - 10s 33ms/sample - loss: 2.2410 - accuracy: 0.1609 Epoch 2/10 317/317 [==============================] - 0s 70us/sample - loss: 1.8336 - accuracy: 0.4038 Epoch 3/10 317/317 [==============================] - 0s 65us/sample - loss: 1.3884 - accuracy: 0.6215 Epoch 4/10 317/317 [==============================] - 0s 65us/sample - loss: 1.0278 - accuracy: 0.6877 Epoch 5/10 317/317 [==============================] - 0s 63us/sample - loss: 0.7994 - accuracy: 0.7224 Epoch 6/10 317/317 [==============================] - 0s 63us/sample - loss: 0.6030 - accuracy: 0.8044 Epoch 7/10 317/317 [==============================] - 0s 65us/sample - loss: 0.5187 - accuracy: 0.8328 Epoch 8/10 317/317 [==============================] - 0s 66us/sample - loss: 0.4410 - accuracy: 0.8423 Epoch 9/10 317/317 [==============================] - 0s 64us/sample - loss: 0.4011 - accuracy: 0.8644 Epoch 10/10 317/317 [==============================] - 0s 65us/sample - loss: 0.3498 - accuracy: 0.8770 Train on 311 samples Epoch 1/10 311/311 [==============================] - 10s 34ms/sample - loss: 2.2341 - accuracy: 0.1833 Epoch 2/10 311/311 [==============================] - 0s 69us/sample - loss: 1.7578 - accuracy: 0.5370 Epoch 3/10 311/311 [==============================] - 0s 67us/sample - loss: 1.1892 - accuracy: 0.7170 Epoch 4/10 311/311 [==============================] - 0s 67us/sample - loss: 0.8591 - accuracy: 0.7460 Epoch 5/10 311/311 [==============================] - 0s 66us/sample - loss: 0.6534 - accuracy: 0.7974 Epoch 6/10 311/311 [==============================] - 0s 65us/sample - loss: 0.4622 - accuracy: 0.8553 Epoch 7/10 311/311 [==============================] - 0s 103us/sample - loss: 0.4083 - accuracy: 0.8650 Epoch 8/10 311/311 [==============================] - 0s 64us/sample - loss: 0.3908 - accuracy: 0.8617 Epoch 9/10 311/311 [==============================] - 0s 64us/sample - loss: 0.3142 - accuracy: 0.8682 Epoch 10/10 311/311 [==============================] - 0s 64us/sample - loss: 0.2398 - accuracy: 0.9228 Train on 336 samples Epoch 1/10 336/336 [==============================] - 1s 3ms/sample - loss: 2.2314 - accuracy: 0.1607 Epoch 2/10 336/336 [==============================] - 0s 62us/sample - loss: 1.7711 - accuracy: 0.5238 Epoch 3/10 336/336 [==============================] - 0s 61us/sample - loss: 1.2727 - accuracy: 0.6310 Epoch 4/10 336/336 [==============================] - 0s 61us/sample - loss: 0.9643 - accuracy: 0.7083 Epoch 5/10 336/336 [==============================] - 0s 60us/sample - loss: 0.7248 - accuracy: 0.7411 Epoch 6/10 336/336 [==============================] - 0s 61us/sample - loss: 0.5790 - accuracy: 0.8125 Epoch 7/10 336/336 [==============================] - 0s 63us/sample - loss: 0.5265 - accuracy: 0.8185 Epoch 8/10 336/336 [==============================] - 0s 63us/sample - loss: 0.4250 - accuracy: 0.8780 Epoch 9/10 336/336 [==============================] - 0s 64us/sample - loss: 0.3255 - accuracy: 0.9107 Epoch 10/10 336/336 [==============================] - 0s 63us/sample - loss: 0.3201 - accuracy: 0.9107 Train on 324 samples Epoch 1/10 324/324 [==============================] - 1s 3ms/sample - loss: 2.2470 - accuracy: 0.1543 Epoch 2/10 324/324 [==============================] - 0s 61us/sample - loss: 1.8273 - accuracy: 0.5000 Epoch 3/10 324/324 [==============================] - 0s 61us/sample - loss: 1.3491 - accuracy: 0.6235 Epoch 4/10 324/324 [==============================] - 0s 63us/sample - loss: 0.9773 - accuracy: 0.6759 Epoch 5/10 324/324 [==============================] - 0s 63us/sample - loss: 0.7357 - accuracy: 0.7716 Epoch 6/10 324/324 [==============================] - 0s 62us/sample - loss: 0.5878 - accuracy: 0.8241 Epoch 7/10 324/324 [==============================] - 0s 62us/sample - loss: 0.6669 - accuracy: 0.7840 Epoch 8/10 324/324 [==============================] - 0s 63us/sample - loss: 0.4734 - accuracy: 0.8642 Epoch 9/10 324/324 [==============================] - 0s 63us/sample - loss: 0.4445 - accuracy: 0.8611 Epoch 10/10 324/324 [==============================] - 0s 62us/sample - loss: 0.3273 - accuracy: 0.9074
The performance of the models appears normal. We see that for the DPA models, the performance drops slightly as the ensemble size increases
clean_preds = np.argmax(model.predict(x_test), axis=1)
clean_correct = np.sum(clean_preds == np.argmax(y_test, axis=1))
clean_total = y_test.shape[0]
clean_acc = clean_correct / clean_total
print("\nClean test set accuracy (model): %.2f%%" % (clean_acc * 100))
# Display image, label, and prediction for a clean sample to show how the poisoned model classifies a clean sample
c = 0 # class to display
i = 0 # image of the class to display
c_idx = np.where(np.argmax(y_test, 1) == c)[0][i] # index of the image in clean arrays
plt.imshow(x_test[c_idx].squeeze())
plt.show()
clean_label = c
print("Prediction: " + str(clean_preds[c_idx]))
Clean test set accuracy (model): 98.04%
Prediction: 0
clean_preds = np.argmax(dpa_model_10.predict(x_test), axis=1)
clean_correct = np.sum(clean_preds == np.argmax(y_test, axis=1))
clean_total = y_test.shape[0]
clean_acc = clean_correct / clean_total
print("\nClean test set accuracy (DPA model_10): %.2f%%" % (clean_acc * 100))
# Display image, label, and prediction for a clean sample to show how the poisoned model classifies a clean sample
c = 0 # class to display
i = 0 # image of the class to display
c_idx = np.where(np.argmax(y_test, 1) == c)[0][i] # index of the image in clean arrays
plt.imshow(x_test[c_idx].squeeze())
plt.show()
clean_label = c
print("Prediction: " + str(clean_preds[c_idx]))
Clean test set accuracy (DPA model_10): 93.99%
Prediction: 0
clean_preds = np.argmax(dpa_model_20.predict(x_test), axis=1)
clean_correct = np.sum(clean_preds == np.argmax(y_test, axis=1))
clean_total = y_test.shape[0]
clean_acc = clean_correct / clean_total
print("\nClean test set accuracy (DPA model_20): %.2f%%" % (clean_acc * 100))
# Display image, label, and prediction for a clean sample to show how the poisoned model classifies a clean sample
c = 0 # class to display
i = 0 # image of the class to display
c_idx = np.where(np.argmax(y_test, 1) == c)[0][i] # index of the image in clean arrays
plt.imshow(x_test[c_idx].squeeze())
plt.show()
clean_label = c
print("Prediction: " + str(clean_preds[c_idx]))
Clean test set accuracy (DPA model_20): 91.28%
Prediction: 0
clean_preds = np.argmax(dpa_model_30.predict(x_test), axis=1)
clean_correct = np.sum(clean_preds == np.argmax(y_test, axis=1))
clean_total = y_test.shape[0]
clean_acc = clean_correct / clean_total
print("\nClean test set accuracy (DPA model_30): %.2f%%" % (clean_acc * 100))
# Display image, label, and prediction for a clean sample to show how the poisoned model classifies a clean sample
c = 0 # class to display
i = 0 # image of the class to display
c_idx = np.where(np.argmax(y_test, 1) == c)[0][i] # index of the image in clean arrays
plt.imshow(x_test[c_idx].squeeze())
plt.show()
clean_label = c
print("Prediction: " + str(clean_preds[c_idx]))
Clean test set accuracy (DPA model_30): 89.75%
Prediction: 0
When the trigger is added, we see a shift in performance. The single model performs the worst as no defense is in place to mitigate the effect of the poisoned. The DPA models show some robustness to the poison as they partition the training data, which spreads the effect of the poison between models in the ensemble.
not_target = np.logical_not(np.all(y_test == targets, axis=1))
px_test, py_test = backdoor.poison(x_test[not_target], y_test[not_target])
poison_preds = np.argmax(model.predict(px_test), axis=1)
clean_correct = np.sum(poison_preds == np.argmax(y_test[not_target], axis=1))
clean_total = y_test.shape[0]
clean_acc = clean_correct / clean_total
print("\nPoison test set accuracy (model): %.2f%%" % (clean_acc * 100))
c = 0 # index to display
plt.imshow(px_test[c].squeeze())
plt.show()
clean_label = c
print("Prediction: " + str(poison_preds[c]))
Poison test set accuracy (model): 0.16%
Prediction: 9
poison_preds = np.argmax(dpa_model_10.predict(px_test), axis=1)
clean_correct = np.sum(poison_preds == np.argmax(y_test[not_target], axis=1))
clean_total = y_test.shape[0]
clean_acc = clean_correct / clean_total
print("\nPoison test set accuracy (DPA model_10): %.2f%%" % (clean_acc * 100))
c = 0 # index to display
plt.imshow(px_test[c].squeeze())
plt.show()
clean_label = c
print("Prediction: " + str(poison_preds[c]))
Poison test set accuracy (DPA model_10): 68.20%
Prediction: 7
poison_preds = np.argmax(dpa_model_20.predict(px_test), axis=1)
clean_correct = np.sum(poison_preds == np.argmax(y_test[not_target], axis=1))
clean_total = y_test.shape[0]
clean_acc = clean_correct / clean_total
print("\nPoison test set accuracy (DPA model_20): %.2f%%" % (clean_acc * 100))
c = 0 # index to display
plt.imshow(px_test[c].squeeze())
plt.show()
clean_label = c
print("Prediction: " + str(poison_preds[c]))
Poison test set accuracy (DPA model_20): 74.00%
Prediction: 7
poison_preds = np.argmax(dpa_model_30.predict(px_test), axis=1)
clean_correct = np.sum(poison_preds == np.argmax(y_test[not_target], axis=1))
clean_total = y_test.shape[0]
clean_acc = clean_correct / clean_total
print("\nPoison test set accuracy (DPA model_30): %.2f%%" % (clean_acc * 100))
c = 0 # index to display
plt.imshow(px_test[c].squeeze())
plt.show()
clean_label = c
print("Prediction: " + str(poison_preds[c]))
Poison test set accuracy (DPA model_30): 74.41%
Prediction: 7