In [1]:
import numpy as np

from sklearn import datasets
from sklearn.model_selection import train_test_split

from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.layers import Dense, Dropout, Flatten
from keras.utils import np_utils
from sklearn import preprocessing
import matplotlib.pyplot as plt

a = l = []

def build_multilayer_perceptron():
    """多層パーセプトロンモデルを構築"""
    model = Sequential()
    model.add(Dense(4, input_shape=(4, ), name='l1'))
    model.add(Activation('relu'))
    model.add(Dense(4, input_shape=(4, ), name='l2'))
    model.add(Activation('relu'))
    #model.add(Dropout(0.5))
    model.add(Dense(3, name='cls'))
    model.add(Activation('softmax'))
    return model

# Irisデータをロード
iris = datasets.load_iris()
X = iris.data
Y = iris.target

# データの標準化
X = preprocessing.scale(X)

# ラベルをone-hot-encoding形式に変換
Y = np_utils.to_categorical(Y)

# 訓練データとテストデータに分割
train_X, test_X, train_Y, test_Y = train_test_split(X, Y, train_size=0.8)
print(train_X.shape, test_X.shape, train_Y.shape, test_Y.shape)


Using TensorFlow backend.
(120, 4) (30, 4) (120, 3) (30, 3)

In [2]:
# モデル構築
model = build_multilayer_perceptron()
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

# モデル訓練
model.fit(train_X, train_Y, epochs=50, batch_size=1, verbose=1)

# モデル評価
loss, accuracy = model.evaluate(test_X, test_Y, verbose=0)
print("Accuracy = {:.2f}".format(accuracy))


Epoch 1/50
120/120 [==============================] - 0s - loss: 1.2139 - acc: 0.3833         
Epoch 2/50
120/120 [==============================] - 0s - loss: 1.1321 - acc: 0.5250       
Epoch 3/50
120/120 [==============================] - 0s - loss: 1.0962 - acc: 0.5917       
Epoch 4/50
120/120 [==============================] - 0s - loss: 1.0738 - acc: 0.6083        
Epoch 5/50
120/120 [==============================] - 0s - loss: 1.0572 - acc: 0.6000     
Epoch 6/50
120/120 [==============================] - 0s - loss: 1.0434 - acc: 0.6250     
Epoch 7/50
120/120 [==============================] - 0s - loss: 1.0319 - acc: 0.6333       
Epoch 8/50
120/120 [==============================] - 0s - loss: 1.0205 - acc: 0.6333        
Epoch 9/50
120/120 [==============================] - 0s - loss: 1.0094 - acc: 0.6333     
Epoch 10/50
120/120 [==============================] - 0s - loss: 0.9990 - acc: 0.6250     
Epoch 11/50
120/120 [==============================] - 0s - loss: 0.9877 - acc: 0.6250     
Epoch 12/50
120/120 [==============================] - 0s - loss: 0.9764 - acc: 0.6333     
Epoch 13/50
120/120 [==============================] - 0s - loss: 0.9639 - acc: 0.6250        
Epoch 14/50
120/120 [==============================] - 0s - loss: 0.9502 - acc: 0.6333       
Epoch 15/50
120/120 [==============================] - 0s - loss: 0.9354 - acc: 0.6417       
Epoch 16/50
120/120 [==============================] - 0s - loss: 0.9204 - acc: 0.6583        
Epoch 17/50
120/120 [==============================] - 0s - loss: 0.9053 - acc: 0.6417     
Epoch 18/50
120/120 [==============================] - 0s - loss: 0.8875 - acc: 0.6500     
Epoch 19/50
120/120 [==============================] - 0s - loss: 0.8714 - acc: 0.6500        
Epoch 20/50
120/120 [==============================] - 0s - loss: 0.8537 - acc: 0.6500     
Epoch 21/50
120/120 [==============================] - 0s - loss: 0.8368 - acc: 0.6417     
Epoch 22/50
120/120 [==============================] - 0s - loss: 0.8197 - acc: 0.6417     
Epoch 23/50
120/120 [==============================] - 0s - loss: 0.8035 - acc: 0.6333        
Epoch 24/50
120/120 [==============================] - 0s - loss: 0.7868 - acc: 0.6250     
Epoch 25/50
120/120 [==============================] - 0s - loss: 0.7716 - acc: 0.6250     
Epoch 26/50
120/120 [==============================] - 0s - loss: 0.7556 - acc: 0.6167       
Epoch 27/50
120/120 [==============================] - 0s - loss: 0.7407 - acc: 0.6167       
Epoch 28/50
120/120 [==============================] - 0s - loss: 0.7257 - acc: 0.6167       
Epoch 29/50
120/120 [==============================] - 0s - loss: 0.7129 - acc: 0.5917     
Epoch 30/50
120/120 [==============================] - 0s - loss: 0.7001 - acc: 0.5583     
Epoch 31/50
120/120 [==============================] - 0s - loss: 0.6875 - acc: 0.5667        
Epoch 32/50
120/120 [==============================] - 0s - loss: 0.6759 - acc: 0.5333        
Epoch 33/50
120/120 [==============================] - 0s - loss: 0.6651 - acc: 0.5417     
Epoch 34/50
120/120 [==============================] - 0s - loss: 0.6552 - acc: 0.5500     
Epoch 35/50
120/120 [==============================] - 0s - loss: 0.6440 - acc: 0.5167        
Epoch 36/50
120/120 [==============================] - 0s - loss: 0.6345 - acc: 0.5167        
Epoch 37/50
120/120 [==============================] - 0s - loss: 0.6260 - acc: 0.5417        
Epoch 38/50
120/120 [==============================] - 0s - loss: 0.6176 - acc: 0.5500        
Epoch 39/50
120/120 [==============================] - 0s - loss: 0.6088 - acc: 0.5833        
Epoch 40/50
120/120 [==============================] - 0s - loss: 0.6002 - acc: 0.6000     
Epoch 41/50
120/120 [==============================] - 0s - loss: 0.5923 - acc: 0.6417     
Epoch 42/50
120/120 [==============================] - 0s - loss: 0.5868 - acc: 0.6417        
Epoch 43/50
120/120 [==============================] - 0s - loss: 0.5771 - acc: 0.6500        
Epoch 44/50
120/120 [==============================] - 0s - loss: 0.5702 - acc: 0.6500     
Epoch 45/50
120/120 [==============================] - 0s - loss: 0.5627 - acc: 0.6500     
Epoch 46/50
120/120 [==============================] - 0s - loss: 0.5563 - acc: 0.6500     
Epoch 47/50
120/120 [==============================] - 0s - loss: 0.5495 - acc: 0.6500     
Epoch 48/50
120/120 [==============================] - 0s - loss: 0.5372 - acc: 0.6500     
Epoch 49/50
120/120 [==============================] - 0s - loss: 0.5218 - acc: 0.6500       
Epoch 50/50
120/120 [==============================] - 0s - loss: 0.4948 - acc: 0.6500     
Accuracy = 0.73

In [21]:
#モデル保存
model.save_weights('my_model_weights.h5')

In [4]:
#モデルのロード
model = Sequential()
model.add(Dense(4, input_shape=(4, ), name='l1'))
model.add(Activation('relu'))
model.add(Dense(4, input_shape=(4, ), name='l2'))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(3, name='cls'))
model.add(Activation('softmax'))

model.load_weights('my_model_weights.h5', by_name=True)
model.summary()

#
#for layer in model.layers[:2]:
#    layer.trainable = False


_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
l1 (Dense)                   (None, 4)                 20        
_________________________________________________________________
activation_7 (Activation)    (None, 4)                 0         
_________________________________________________________________
l2 (Dense)                   (None, 4)                 20        
_________________________________________________________________
activation_8 (Activation)    (None, 4)                 0         
_________________________________________________________________
dropout_2 (Dropout)          (None, 4)                 0         
_________________________________________________________________
cls (Dense)                  (None, 3)                 15        
_________________________________________________________________
activation_9 (Activation)    (None, 3)                 0         
=================================================================
Total params: 55
Trainable params: 55
Non-trainable params: 0
_________________________________________________________________

In [5]:
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# モデル訓練
model.fit(test_X, test_Y, epochs=50, batch_size=1, verbose=1)

loss, accuracy = model.evaluate(test_X, test_Y, verbose=0)
print("Accuracy = {:.2f}".format(accuracy))


Epoch 1/50
30/30 [==============================] - 0s - loss: 1.9885 - acc: 0.5333         
Epoch 2/50
30/30 [==============================] - 0s - loss: 1.2767 - acc: 0.6667         
Epoch 3/50
30/30 [==============================] - 0s - loss: 0.4599 - acc: 0.7667         
Epoch 4/50
30/30 [==============================] - 0s - loss: 1.4425 - acc: 0.6333         
Epoch 5/50
30/30 [==============================] - 0s - loss: 1.2697 - acc: 0.7000         
Epoch 6/50
30/30 [==============================] - 0s - loss: 0.9079 - acc: 0.7667     
Epoch 7/50
30/30 [==============================] - 0s - loss: 1.2881 - acc: 0.6667         
Epoch 8/50
30/30 [==============================] - 0s - loss: 1.5422 - acc: 0.6333     
Epoch 9/50
30/30 [==============================] - 0s - loss: 0.5990 - acc: 0.8333     
Epoch 10/50
30/30 [==============================] - 0s - loss: 1.8923 - acc: 0.5333         
Epoch 11/50
30/30 [==============================] - 0s - loss: 1.1823 - acc: 0.7333         
Epoch 12/50
30/30 [==============================] - 0s - loss: 1.2670 - acc: 0.6333     
Epoch 13/50
30/30 [==============================] - 0s - loss: 0.8398 - acc: 0.7333         
Epoch 14/50
30/30 [==============================] - 0s - loss: 0.9550 - acc: 0.7333     
Epoch 15/50
30/30 [==============================] - 0s - loss: 0.9578 - acc: 0.7333         
Epoch 16/50
30/30 [==============================] - ETA: 0s - loss: 0.0011 - acc: 1.000 - 0s - loss: 1.0942 - acc: 0.7000     
Epoch 17/50
30/30 [==============================] - 0s - loss: 0.6804 - acc: 0.7333     
Epoch 18/50
30/30 [==============================] - 0s - loss: 0.8193 - acc: 0.7667         
Epoch 19/50
30/30 [==============================] - 0s - loss: 1.0397 - acc: 0.7333         
Epoch 20/50
30/30 [==============================] - 0s - loss: 1.1131 - acc: 0.6333         
Epoch 21/50
30/30 [==============================] - 0s - loss: 0.7545 - acc: 0.7667     
Epoch 22/50
30/30 [==============================] - 0s - loss: 0.5940 - acc: 0.8333     
Epoch 23/50
30/30 [==============================] - 0s - loss: 0.7878 - acc: 0.7000         
Epoch 24/50
30/30 [==============================] - 0s - loss: 0.8876 - acc: 0.7667     
Epoch 25/50
30/30 [==============================] - 0s - loss: 0.8782 - acc: 0.7333         
Epoch 26/50
30/30 [==============================] - 0s - loss: 0.7679 - acc: 0.7333     
Epoch 27/50
30/30 [==============================] - 0s - loss: 0.8210 - acc: 0.7333         
Epoch 28/50
30/30 [==============================] - 0s - loss: 0.5197 - acc: 0.8333         
Epoch 29/50
30/30 [==============================] - 0s - loss: 0.7196 - acc: 0.7333     
Epoch 30/50
30/30 [==============================] - 0s - loss: 0.9312 - acc: 0.6667     
Epoch 31/50
30/30 [==============================] - 0s - loss: 0.4061 - acc: 0.8667         
Epoch 32/50
30/30 [==============================] - 0s - loss: 0.8994 - acc: 0.6667         
Epoch 33/50
30/30 [==============================] - 0s - loss: 0.5981 - acc: 0.8000     
Epoch 34/50
30/30 [==============================] - 0s - loss: 0.7241 - acc: 0.7333     
Epoch 35/50
30/30 [==============================] - 0s - loss: 0.8799 - acc: 0.7000     
Epoch 36/50
30/30 [==============================] - 0s - loss: 0.5681 - acc: 0.8000     
Epoch 37/50
30/30 [==============================] - 0s - loss: 0.8932 - acc: 0.6667         
Epoch 38/50
30/30 [==============================] - 0s - loss: 0.8078 - acc: 0.7333     
Epoch 39/50
30/30 [==============================] - 0s - loss: 0.9197 - acc: 0.7000         
Epoch 40/50
30/30 [==============================] - 0s - loss: 0.8454 - acc: 0.7667     
Epoch 41/50
30/30 [==============================] - 0s - loss: 0.6268 - acc: 0.8000     
Epoch 42/50
30/30 [==============================] - 0s - loss: 0.6760 - acc: 0.7333     
Epoch 43/50
30/30 [==============================] - 0s - loss: 1.0148 - acc: 0.6667     
Epoch 44/50
30/30 [==============================] - 0s - loss: 0.9666 - acc: 0.6667         
Epoch 45/50
30/30 [==============================] - 0s - loss: 0.5963 - acc: 0.8000     
Epoch 46/50
30/30 [==============================] - 0s - loss: 0.7851 - acc: 0.7000         
Epoch 47/50
30/30 [==============================] - 0s - loss: 0.5623 - acc: 0.8333     
Epoch 48/50
30/30 [==============================] - 0s - loss: 0.7574 - acc: 0.7333     
Epoch 49/50
30/30 [==============================] - 0s - loss: 0.4094 - acc: 0.8667         
Epoch 50/50
30/30 [==============================] - 0s - loss: 0.6300 - acc: 0.8000         
Accuracy = 0.93

In [ ]: