In [1]:
# 분류 DNN 모델 구현 ########################
from keras import layers, models
 
class DNN(models.Sequential):
    def __init__(self, Nin, Nh_l, Nout):
        super().__init__()
        
        self.add(layers.Dense(Nh_l[0], activation='relu', 
                 input_shape=(Nin,), name='Hidden-1'))
        self.add(layers.Dropout(0.01))
        
        self.add(layers.Dense(Nh_l[1], activation='relu', 
                 name='Hidden-2'))       
        self.add(layers.Dropout(0.05))
        
        self.add(layers.Dense(Nout, activation='softmax'))

        self.compile(loss='categorical_crossentropy', 
                         optimizer='adam', 
                         metrics=['accuracy'])

        
# 데이터 준비 ##############################
import numpy as np
from keras import datasets  # mnist
from keras.utils import np_utils  # to_categorical


def Data_func():
    (X_train, y_train), (X_test, y_test) = datasets.cifar10.load_data()

    Y_train = np_utils.to_categorical(y_train)
    Y_test = np_utils.to_categorical(y_test)

    L, W, H, C = X_train.shape
    X_train = X_train.reshape(-1, W * H * C)
    X_test = X_test.reshape(-1, W * H * C)

    X_train = X_train / 255.0
    X_test = X_test / 255.0
    
    return (X_train, Y_train), (X_test, Y_test)


# 학습 효과 분석 ##############################
from ann_mnist_cl import plot_loss, plot_acc
import matplotlib.pyplot as plt


# 분류 DNN 학습 및 테스팅 ####################
def main():
    Nh_l = [100, 50]
    number_of_class = 10
    Nout = number_of_class

    (X_train, Y_train), (X_test, Y_test) = Data_func()
    model = DNN(X_train.shape[1], Nh_l, Nout)
    history = model.fit(X_train, y_train, epochs=10, batch_size=100, validation_split=0.2)
    
    performace_test = model.evaluate(X_test, y_test, batch_size=100)
    print('Test Loss and Accuracy ->', performace_test)

    plot_acc(history)
    plt.show()
    plot_loss(history)
    plt.show()


Using TensorFlow backend.

In [2]:
Nin = 784
Nh_l = [50, 50]
number_of_class = 10
Nout = number_of_class

(X_train, Y_train), (X_test, Y_test) = Data_func()
model = DNN(X_train.shape[1], Nh_l, Nout)
history = model.fit(X_train, Y_train, epochs=100, batch_size=100, validation_split=0.2)

performace_test = model.evaluate(X_test, Y_test, batch_size=100)
print('Test Loss and Accuracy ->', performace_test)

plot_acc(history)
plt.show()
plot_loss(history)
plt.show()


Train on 40000 samples, validate on 10000 samples
Epoch 1/100
40000/40000 [==============================] - 5s - loss: 1.9718 - acc: 0.2846 - val_loss: 1.8431 - val_acc: 0.3413
Epoch 2/100
40000/40000 [==============================] - 3s - loss: 1.8113 - acc: 0.3448 - val_loss: 1.7947 - val_acc: 0.3642
Epoch 3/100
40000/40000 [==============================] - 3s - loss: 1.7443 - acc: 0.3755 - val_loss: 1.7337 - val_acc: 0.3855
Epoch 4/100
40000/40000 [==============================] - 3s - loss: 1.7060 - acc: 0.3910 - val_loss: 1.6949 - val_acc: 0.3955
Epoch 5/100
40000/40000 [==============================] - 3s - loss: 1.6730 - acc: 0.4024 - val_loss: 1.6741 - val_acc: 0.4028
Epoch 6/100
40000/40000 [==============================] - 3s - loss: 1.6527 - acc: 0.4061 - val_loss: 1.6645 - val_acc: 0.4058
Epoch 7/100
40000/40000 [==============================] - 3s - loss: 1.6284 - acc: 0.4171 - val_loss: 1.6322 - val_acc: 0.4180
Epoch 8/100
40000/40000 [==============================] - 3s - loss: 1.6051 - acc: 0.4245 - val_loss: 1.6298 - val_acc: 0.4243
Epoch 9/100
40000/40000 [==============================] - 3s - loss: 1.5953 - acc: 0.4293 - val_loss: 1.6058 - val_acc: 0.4284
Epoch 10/100
40000/40000 [==============================] - 3s - loss: 1.5880 - acc: 0.4304 - val_loss: 1.6068 - val_acc: 0.4236
Epoch 11/100
40000/40000 [==============================] - 3s - loss: 1.5750 - acc: 0.4345 - val_loss: 1.5938 - val_acc: 0.4343
Epoch 12/100
40000/40000 [==============================] - 3s - loss: 1.5631 - acc: 0.4405 - val_loss: 1.5971 - val_acc: 0.4290
Epoch 13/100
40000/40000 [==============================] - 3s - loss: 1.5552 - acc: 0.4437 - val_loss: 1.5871 - val_acc: 0.4340
Epoch 14/100
40000/40000 [==============================] - 3s - loss: 1.5440 - acc: 0.4483 - val_loss: 1.5929 - val_acc: 0.4284
Epoch 15/100
40000/40000 [==============================] - 3s - loss: 1.5474 - acc: 0.4445 - val_loss: 1.5717 - val_acc: 0.4368
Epoch 16/100
40000/40000 [==============================] - 3s - loss: 1.5355 - acc: 0.4501 - val_loss: 1.5531 - val_acc: 0.4508
Epoch 17/100
40000/40000 [==============================] - 3s - loss: 1.5284 - acc: 0.4515 - val_loss: 1.5890 - val_acc: 0.4309
Epoch 18/100
40000/40000 [==============================] - 3s - loss: 1.5239 - acc: 0.4539 - val_loss: 1.5629 - val_acc: 0.4436
Epoch 19/100
40000/40000 [==============================] - 3s - loss: 1.5274 - acc: 0.4528 - val_loss: 1.5738 - val_acc: 0.4408
Epoch 20/100
40000/40000 [==============================] - 3s - loss: 1.5193 - acc: 0.4550 - val_loss: 1.5451 - val_acc: 0.4511
Epoch 21/100
40000/40000 [==============================] - 3s - loss: 1.5059 - acc: 0.4605 - val_loss: 1.5641 - val_acc: 0.4412
Epoch 22/100
40000/40000 [==============================] - 3s - loss: 1.5140 - acc: 0.4556 - val_loss: 1.5429 - val_acc: 0.4507
Epoch 23/100
40000/40000 [==============================] - 3s - loss: 1.5080 - acc: 0.4576 - val_loss: 1.5811 - val_acc: 0.4347
Epoch 24/100
40000/40000 [==============================] - 3s - loss: 1.5057 - acc: 0.4617 - val_loss: 1.5363 - val_acc: 0.4515
Epoch 25/100
40000/40000 [==============================] - 3s - loss: 1.5031 - acc: 0.4604 - val_loss: 1.5453 - val_acc: 0.4500
Epoch 26/100
40000/40000 [==============================] - 3s - loss: 1.4987 - acc: 0.4620 - val_loss: 1.5383 - val_acc: 0.4517
Epoch 27/100
40000/40000 [==============================] - 3s - loss: 1.4999 - acc: 0.4627 - val_loss: 1.5565 - val_acc: 0.4447
Epoch 28/100
40000/40000 [==============================] - 3s - loss: 1.4956 - acc: 0.4632 - val_loss: 1.5704 - val_acc: 0.4424
Epoch 29/100
40000/40000 [==============================] - 3s - loss: 1.4919 - acc: 0.4623 - val_loss: 1.5680 - val_acc: 0.4464
Epoch 30/100
40000/40000 [==============================] - 3s - loss: 1.4838 - acc: 0.4669 - val_loss: 1.5762 - val_acc: 0.4383
Epoch 31/100
40000/40000 [==============================] - 3s - loss: 1.4895 - acc: 0.4675 - val_loss: 1.5409 - val_acc: 0.4510
Epoch 32/100
40000/40000 [==============================] - 3s - loss: 1.4824 - acc: 0.4690 - val_loss: 1.5424 - val_acc: 0.4511
Epoch 33/100
40000/40000 [==============================] - 3s - loss: 1.4823 - acc: 0.4651 - val_loss: 1.5547 - val_acc: 0.4498
Epoch 34/100
40000/40000 [==============================] - 3s - loss: 1.4816 - acc: 0.4706 - val_loss: 1.5464 - val_acc: 0.4524
Epoch 35/100
40000/40000 [==============================] - 3s - loss: 1.4812 - acc: 0.4691 - val_loss: 1.5304 - val_acc: 0.4592
Epoch 36/100
40000/40000 [==============================] - 3s - loss: 1.4835 - acc: 0.4668 - val_loss: 1.5403 - val_acc: 0.4503
Epoch 37/100
40000/40000 [==============================] - 3s - loss: 1.4725 - acc: 0.4706 - val_loss: 1.5402 - val_acc: 0.4500
Epoch 38/100
40000/40000 [==============================] - 3s - loss: 1.4700 - acc: 0.4717 - val_loss: 1.5368 - val_acc: 0.4520
Epoch 39/100
40000/40000 [==============================] - 3s - loss: 1.4705 - acc: 0.4705 - val_loss: 1.5470 - val_acc: 0.4542
Epoch 40/100
40000/40000 [==============================] - 3s - loss: 1.4618 - acc: 0.4769 - val_loss: 1.5439 - val_acc: 0.4549
Epoch 41/100
40000/40000 [==============================] - 3s - loss: 1.4673 - acc: 0.4740 - val_loss: 1.5435 - val_acc: 0.4502
Epoch 42/100
40000/40000 [==============================] - 3s - loss: 1.4629 - acc: 0.4752 - val_loss: 1.5600 - val_acc: 0.4457
Epoch 43/100
40000/40000 [==============================] - 3s - loss: 1.4615 - acc: 0.4752 - val_loss: 1.5591 - val_acc: 0.4422
Epoch 44/100
40000/40000 [==============================] - 3s - loss: 1.4635 - acc: 0.4750 - val_loss: 1.5748 - val_acc: 0.4385
Epoch 45/100
40000/40000 [==============================] - 3s - loss: 1.4615 - acc: 0.4762 - val_loss: 1.5342 - val_acc: 0.4565
Epoch 46/100
40000/40000 [==============================] - 3s - loss: 1.4635 - acc: 0.4763 - val_loss: 1.5391 - val_acc: 0.4548
Epoch 47/100
40000/40000 [==============================] - 3s - loss: 1.4633 - acc: 0.4760 - val_loss: 1.5363 - val_acc: 0.4510
Epoch 48/100
40000/40000 [==============================] - 3s - loss: 1.4558 - acc: 0.4787 - val_loss: 1.5716 - val_acc: 0.4355
Epoch 49/100
40000/40000 [==============================] - 3s - loss: 1.4550 - acc: 0.4790 - val_loss: 1.5485 - val_acc: 0.4504
Epoch 50/100
40000/40000 [==============================] - 3s - loss: 1.4504 - acc: 0.4818 - val_loss: 1.5405 - val_acc: 0.4479
Epoch 51/100
40000/40000 [==============================] - 3s - loss: 1.4539 - acc: 0.4797 - val_loss: 1.5419 - val_acc: 0.4507
Epoch 52/100
40000/40000 [==============================] - 3s - loss: 1.4493 - acc: 0.4793 - val_loss: 1.5492 - val_acc: 0.4481
Epoch 53/100
40000/40000 [==============================] - 3s - loss: 1.4521 - acc: 0.4803 - val_loss: 1.5483 - val_acc: 0.4532
Epoch 54/100
40000/40000 [==============================] - 3s - loss: 1.4466 - acc: 0.4813 - val_loss: 1.5369 - val_acc: 0.4558
Epoch 55/100
40000/40000 [==============================] - 3s - loss: 1.4458 - acc: 0.4818 - val_loss: 1.5547 - val_acc: 0.4496
Epoch 56/100
40000/40000 [==============================] - 3s - loss: 1.4479 - acc: 0.4801 - val_loss: 1.5540 - val_acc: 0.4453
Epoch 57/100
40000/40000 [==============================] - 3s - loss: 1.4457 - acc: 0.4775 - val_loss: 1.5441 - val_acc: 0.4555
Epoch 58/100
40000/40000 [==============================] - 3s - loss: 1.4390 - acc: 0.4845 - val_loss: 1.5451 - val_acc: 0.4540
Epoch 59/100
40000/40000 [==============================] - 3s - loss: 1.4469 - acc: 0.4816 - val_loss: 1.5423 - val_acc: 0.4474
Epoch 60/100
40000/40000 [==============================] - 3s - loss: 1.4357 - acc: 0.4828 - val_loss: 1.5425 - val_acc: 0.4510
Epoch 61/100
40000/40000 [==============================] - 3s - loss: 1.4421 - acc: 0.4828 - val_loss: 1.5560 - val_acc: 0.4474
Epoch 62/100
40000/40000 [==============================] - 3s - loss: 1.4417 - acc: 0.4823 - val_loss: 1.5626 - val_acc: 0.4449
Epoch 63/100
40000/40000 [==============================] - 3s - loss: 1.4367 - acc: 0.4842 - val_loss: 1.5189 - val_acc: 0.4606
Epoch 64/100
40000/40000 [==============================] - 3s - loss: 1.4376 - acc: 0.4851 - val_loss: 1.5574 - val_acc: 0.4468
Epoch 65/100
40000/40000 [==============================] - 3s - loss: 1.4367 - acc: 0.4842 - val_loss: 1.5356 - val_acc: 0.4563
Epoch 66/100
40000/40000 [==============================] - 3s - loss: 1.4327 - acc: 0.4868 - val_loss: 1.5364 - val_acc: 0.4558
Epoch 67/100
40000/40000 [==============================] - 3s - loss: 1.4345 - acc: 0.4855 - val_loss: 1.5426 - val_acc: 0.4522
Epoch 68/100
40000/40000 [==============================] - 3s - loss: 1.4368 - acc: 0.4849 - val_loss: 1.5276 - val_acc: 0.4589
Epoch 69/100
40000/40000 [==============================] - 3s - loss: 1.4333 - acc: 0.4867 - val_loss: 1.5248 - val_acc: 0.4574
Epoch 70/100
40000/40000 [==============================] - 3s - loss: 1.4308 - acc: 0.4869 - val_loss: 1.5317 - val_acc: 0.4523
Epoch 71/100
40000/40000 [==============================] - 3s - loss: 1.4283 - acc: 0.4863 - val_loss: 1.5388 - val_acc: 0.4521
Epoch 72/100
40000/40000 [==============================] - 3s - loss: 1.4276 - acc: 0.4868 - val_loss: 1.5658 - val_acc: 0.4432
Epoch 73/100
40000/40000 [==============================] - 3s - loss: 1.4267 - acc: 0.4883 - val_loss: 1.5331 - val_acc: 0.4552
Epoch 74/100
40000/40000 [==============================] - 3s - loss: 1.4263 - acc: 0.4889 - val_loss: 1.5300 - val_acc: 0.4610
Epoch 75/100
40000/40000 [==============================] - 3s - loss: 1.4231 - acc: 0.4931 - val_loss: 1.5298 - val_acc: 0.4588
Epoch 76/100
40000/40000 [==============================] - 3s - loss: 1.4321 - acc: 0.4873 - val_loss: 1.5377 - val_acc: 0.4519
Epoch 77/100
40000/40000 [==============================] - 3s - loss: 1.4248 - acc: 0.4885 - val_loss: 1.5546 - val_acc: 0.4487
Epoch 78/100
40000/40000 [==============================] - 3s - loss: 1.4202 - acc: 0.4897 - val_loss: 1.5360 - val_acc: 0.4503
Epoch 79/100
40000/40000 [==============================] - 3s - loss: 1.4210 - acc: 0.4882 - val_loss: 1.5572 - val_acc: 0.4519
Epoch 80/100
40000/40000 [==============================] - 3s - loss: 1.4205 - acc: 0.4907 - val_loss: 1.5693 - val_acc: 0.4477
Epoch 81/100
40000/40000 [==============================] - 3s - loss: 1.4203 - acc: 0.4897 - val_loss: 1.5614 - val_acc: 0.4480
Epoch 82/100
40000/40000 [==============================] - 3s - loss: 1.4254 - acc: 0.4880 - val_loss: 1.5255 - val_acc: 0.4569
Epoch 83/100
40000/40000 [==============================] - 3s - loss: 1.4182 - acc: 0.4891 - val_loss: 1.5352 - val_acc: 0.4540
Epoch 84/100
40000/40000 [==============================] - 3s - loss: 1.4175 - acc: 0.4910 - val_loss: 1.5532 - val_acc: 0.4483
Epoch 85/100
40000/40000 [==============================] - 3s - loss: 1.4171 - acc: 0.4889 - val_loss: 1.5458 - val_acc: 0.4543
Epoch 86/100
40000/40000 [==============================] - 3s - loss: 1.4142 - acc: 0.4913 - val_loss: 1.5287 - val_acc: 0.4554
Epoch 87/100
40000/40000 [==============================] - 3s - loss: 1.4109 - acc: 0.4947 - val_loss: 1.5301 - val_acc: 0.4598
Epoch 88/100
40000/40000 [==============================] - 3s - loss: 1.4142 - acc: 0.4942 - val_loss: 1.5525 - val_acc: 0.4486
Epoch 89/100
40000/40000 [==============================] - 3s - loss: 1.4162 - acc: 0.4925 - val_loss: 1.5264 - val_acc: 0.4582
Epoch 90/100
40000/40000 [==============================] - 3s - loss: 1.4086 - acc: 0.4921 - val_loss: 1.5365 - val_acc: 0.4580
Epoch 91/100
40000/40000 [==============================] - 3s - loss: 1.4143 - acc: 0.4926 - val_loss: 1.5384 - val_acc: 0.4565
Epoch 92/100
40000/40000 [==============================] - 3s - loss: 1.4093 - acc: 0.4943 - val_loss: 1.5525 - val_acc: 0.4526
Epoch 93/100
40000/40000 [==============================] - 3s - loss: 1.4040 - acc: 0.4958 - val_loss: 1.5339 - val_acc: 0.4559
Epoch 94/100
40000/40000 [==============================] - 3s - loss: 1.4085 - acc: 0.4961 - val_loss: 1.5469 - val_acc: 0.4524
Epoch 95/100
40000/40000 [==============================] - 3s - loss: 1.4083 - acc: 0.4926 - val_loss: 1.5396 - val_acc: 0.4569
Epoch 96/100
40000/40000 [==============================] - 3s - loss: 1.4037 - acc: 0.4988 - val_loss: 1.5281 - val_acc: 0.4584
Epoch 97/100
40000/40000 [==============================] - 3s - loss: 1.4031 - acc: 0.4977 - val_loss: 1.5435 - val_acc: 0.4546
Epoch 98/100
40000/40000 [==============================] - 3s - loss: 1.3995 - acc: 0.4987 - val_loss: 1.5281 - val_acc: 0.4574
Epoch 99/100
40000/40000 [==============================] - 3s - loss: 1.4048 - acc: 0.4932 - val_loss: 1.5352 - val_acc: 0.4551
Epoch 100/100
40000/40000 [==============================] - 3s - loss: 1.4055 - acc: 0.4981 - val_loss: 1.5611 - val_acc: 0.4476
10000/10000 [==============================] - 0s     
Test Loss and Accuracy -> [1.5409486126899719, 0.4568999832868576]

In [ ]: