準備

Googleドライブのマウント

In [2]:
from google.colab import drive
drive.mount('/content/drive')
Mounted at /content/drive

sys.pathの設定

以下では,Googleドライブのマイドライブ直下にDNN_codeフォルダを置くことを仮定しています.必要に応じて,パスを変更してください.

In [3]:
import sys
sys.path.append('/content/drive/My Drive/DNN_code_colab_ver200425')

keras

線形回帰

In [2]:
pip install tensorflow==1.15
Collecting tensorflow==1.15
  Downloading https://files.pythonhosted.org/packages/3f/98/5a99af92fb911d7a88a0005ad55005f35b4c1ba8d75fba02df726cd936e6/tensorflow-1.15.0-cp36-cp36m-manylinux2010_x86_64.whl (412.3MB)
     |████████████████████████████████| 412.3MB 42kB/s 
Requirement already satisfied: termcolor>=1.1.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow==1.15) (1.1.0)
Requirement already satisfied: opt-einsum>=2.3.2 in /usr/local/lib/python3.6/dist-packages (from tensorflow==1.15) (3.3.0)
Requirement already satisfied: protobuf>=3.6.1 in /usr/local/lib/python3.6/dist-packages (from tensorflow==1.15) (3.12.4)
Collecting keras-applications>=1.0.8
  Downloading https://files.pythonhosted.org/packages/71/e3/19762fdfc62877ae9102edf6342d71b28fbfd9dea3d2f96a882ce099b03f/Keras_Applications-1.0.8-py3-none-any.whl (50kB)
     |████████████████████████████████| 51kB 8.0MB/s 
Requirement already satisfied: grpcio>=1.8.6 in /usr/local/lib/python3.6/dist-packages (from tensorflow==1.15) (1.32.0)
Requirement already satisfied: wheel>=0.26 in /usr/local/lib/python3.6/dist-packages (from tensorflow==1.15) (0.36.2)
Requirement already satisfied: six>=1.10.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow==1.15) (1.15.0)
Collecting tensorflow-estimator==1.15.1
  Downloading https://files.pythonhosted.org/packages/de/62/2ee9cd74c9fa2fa450877847ba560b260f5d0fb70ee0595203082dafcc9d/tensorflow_estimator-1.15.1-py2.py3-none-any.whl (503kB)
     |████████████████████████████████| 512kB 60.9MB/s 
Requirement already satisfied: keras-preprocessing>=1.0.5 in /usr/local/lib/python3.6/dist-packages (from tensorflow==1.15) (1.1.2)
Requirement already satisfied: absl-py>=0.7.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow==1.15) (0.10.0)
Requirement already satisfied: numpy<2.0,>=1.16.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow==1.15) (1.19.4)
Collecting gast==0.2.2
  Downloading https://files.pythonhosted.org/packages/4e/35/11749bf99b2d4e3cceb4d55ca22590b0d7c2c62b9de38ac4a4a7f4687421/gast-0.2.2.tar.gz
Requirement already satisfied: astor>=0.6.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow==1.15) (0.8.1)
Collecting tensorboard<1.16.0,>=1.15.0
  Downloading https://files.pythonhosted.org/packages/1e/e9/d3d747a97f7188f48aa5eda486907f3b345cd409f0a0850468ba867db246/tensorboard-1.15.0-py3-none-any.whl (3.8MB)
     |████████████████████████████████| 3.8MB 43.7MB/s 
Requirement already satisfied: wrapt>=1.11.1 in /usr/local/lib/python3.6/dist-packages (from tensorflow==1.15) (1.12.1)
Requirement already satisfied: google-pasta>=0.1.6 in /usr/local/lib/python3.6/dist-packages (from tensorflow==1.15) (0.2.0)
Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from protobuf>=3.6.1->tensorflow==1.15) (50.3.2)
Requirement already satisfied: h5py in /usr/local/lib/python3.6/dist-packages (from keras-applications>=1.0.8->tensorflow==1.15) (2.10.0)
Requirement already satisfied: werkzeug>=0.11.15 in /usr/local/lib/python3.6/dist-packages (from tensorboard<1.16.0,>=1.15.0->tensorflow==1.15) (1.0.1)
Requirement already satisfied: markdown>=2.6.8 in /usr/local/lib/python3.6/dist-packages (from tensorboard<1.16.0,>=1.15.0->tensorflow==1.15) (3.3.3)
Requirement already satisfied: importlib-metadata; python_version < "3.8" in /usr/local/lib/python3.6/dist-packages (from markdown>=2.6.8->tensorboard<1.16.0,>=1.15.0->tensorflow==1.15) (3.3.0)
Requirement already satisfied: typing-extensions>=3.6.4; python_version < "3.8" in /usr/local/lib/python3.6/dist-packages (from importlib-metadata; python_version < "3.8"->markdown>=2.6.8->tensorboard<1.16.0,>=1.15.0->tensorflow==1.15) (3.7.4.3)
Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.6/dist-packages (from importlib-metadata; python_version < "3.8"->markdown>=2.6.8->tensorboard<1.16.0,>=1.15.0->tensorflow==1.15) (3.4.0)
Building wheels for collected packages: gast
  Building wheel for gast (setup.py) ... done
  Created wheel for gast: filename=gast-0.2.2-cp36-none-any.whl size=7540 sha256=63bb9372d28ca84dac4ae0a91ea7380a8181be3e78b75e8f8680dd7f709ab62c
  Stored in directory: /root/.cache/pip/wheels/5c/2e/7e/a1d4d4fcebe6c381f378ce7743a3ced3699feb89bcfbdadadd
Successfully built gast
ERROR: tensorflow-probability 0.11.0 has requirement gast>=0.3.2, but you'll have gast 0.2.2 which is incompatible.
Installing collected packages: keras-applications, tensorflow-estimator, gast, tensorboard, tensorflow
  Found existing installation: tensorflow-estimator 2.4.0
    Uninstalling tensorflow-estimator-2.4.0:
      Successfully uninstalled tensorflow-estimator-2.4.0
  Found existing installation: gast 0.3.3
    Uninstalling gast-0.3.3:
      Successfully uninstalled gast-0.3.3
  Found existing installation: tensorboard 2.4.0
    Uninstalling tensorboard-2.4.0:
      Successfully uninstalled tensorboard-2.4.0
  Found existing installation: tensorflow 2.4.0
    Uninstalling tensorflow-2.4.0:
      Successfully uninstalled tensorflow-2.4.0
Successfully installed gast-0.2.2 keras-applications-1.0.8 tensorboard-1.15.0 tensorflow-1.15.0 tensorflow-estimator-1.15.1
In [3]:
pip install keras==2.3.1
Collecting keras==2.3.1
  Downloading https://files.pythonhosted.org/packages/ad/fd/6bfe87920d7f4fd475acd28500a42482b6b84479832bdc0fe9e589a60ceb/Keras-2.3.1-py2.py3-none-any.whl (377kB)
     |████████████████████████████████| 378kB 14.5MB/s 
Requirement already satisfied: numpy>=1.9.1 in /usr/local/lib/python3.6/dist-packages (from keras==2.3.1) (1.19.4)
Requirement already satisfied: h5py in /usr/local/lib/python3.6/dist-packages (from keras==2.3.1) (2.10.0)
Requirement already satisfied: scipy>=0.14 in /usr/local/lib/python3.6/dist-packages (from keras==2.3.1) (1.4.1)
Requirement already satisfied: pyyaml in /usr/local/lib/python3.6/dist-packages (from keras==2.3.1) (3.13)
Requirement already satisfied: six>=1.9.0 in /usr/local/lib/python3.6/dist-packages (from keras==2.3.1) (1.15.0)
Requirement already satisfied: keras-preprocessing>=1.0.5 in /usr/local/lib/python3.6/dist-packages (from keras==2.3.1) (1.1.2)
Requirement already satisfied: keras-applications>=1.0.6 in /usr/local/lib/python3.6/dist-packages (from keras==2.3.1) (1.0.8)
Installing collected packages: keras
  Found existing installation: Keras 2.4.3
    Uninstalling Keras-2.4.3:
      Successfully uninstalled Keras-2.4.3
Successfully installed keras-2.3.1
In [1]:
import tensorflow as tf

# logging levelを変更
tf.logging.set_verbosity(tf.logging.ERROR)


import numpy as np
import matplotlib.pyplot as plt

iters_num = 1000
plot_interval = 10

x = np.linspace(-1, 1, 200)
np.random.shuffle(x)
d = 0.5 * x + 2 + np.random.normal(0, 0.05, (200,))

from keras.models import Sequential
from keras.layers import Dense

# モデルを作成
model = Sequential()
#model.add(Dense(input_dim=1, units=1))
model.add(Dense(input_dim=1, output_dim=1))

# モデルを表示
model.summary()

# モデルのコンパイル
model.compile(loss='mse', optimizer='sgd')

# train
for i in range(iters_num):
    loss = model.train_on_batch(x, d)
    if (i+1) % plot_interval == 0:
        print('Generation: ' + str(i+1) + '. 誤差 = ' + str(loss))

W, b = model.layers[0].get_weights()
print('W:', W)
print('b:', b)

y = model.predict(x)
plt.scatter(x, d)
plt.plot(x, y)
plt.show()
Using TensorFlow backend.
/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:23: UserWarning: Update your `Dense` call to the Keras 2 API: `Dense(input_dim=1, units=1)`
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 1)                 2         
=================================================================
Total params: 2
Trainable params: 2
Non-trainable params: 0
_________________________________________________________________
Generation: 10. 誤差 = 4.060977
Generation: 20. 誤差 = 2.9780204
Generation: 30. 誤差 = 2.2214158
Generation: 40. 誤差 = 1.6869353
Generation: 50. 誤差 = 1.3044583
Generation: 60. 誤差 = 1.0267028
Generation: 70. 誤差 = 0.8216928
Generation: 80. 誤差 = 0.66772264
Generation: 90. 誤差 = 0.54998916
Generation: 100. 誤差 = 0.45833626
Generation: 110. 誤差 = 0.3857447
Generation: 120. 誤差 = 0.32731998
Generation: 130. 誤差 = 0.27961242
Generation: 140. 誤差 = 0.24015966
Generation: 150. 誤差 = 0.20717885
Generation: 160. 誤差 = 0.17935821
Generation: 170. 誤差 = 0.15571602
Generation: 180. 誤差 = 0.13550402
Generation: 190. 誤差 = 0.11814182
Generation: 200. 誤差 = 0.10317113
Generation: 210. 誤差 = 0.09022416
Generation: 220. 誤差 = 0.079001434
Generation: 230. 誤差 = 0.06925585
Generation: 240. 誤差 = 0.060781192
Generation: 250. 誤差 = 0.05340382
Generation: 260. 誤差 = 0.046976376
Generation: 270. 誤差 = 0.04137297
Generation: 280. 誤差 = 0.036485597
Generation: 290. 誤差 = 0.032221157
Generation: 300. 誤差 = 0.028499188
Generation: 310. 誤差 = 0.025249982
Generation: 320. 誤差 = 0.022413004
Generation: 330. 誤差 = 0.019935645
Generation: 340. 誤差 = 0.017772112
Generation: 350. 誤差 = 0.015882486
Generation: 360. 誤差 = 0.014232013
Generation: 370. 誤差 = 0.012790365
Generation: 380. 誤差 = 0.011531068
Generation: 390. 誤差 = 0.01043104
Generation: 400. 誤差 = 0.009470105
Generation: 410. 誤差 = 0.008630674
Generation: 420. 誤差 = 0.007897368
Generation: 430. 誤差 = 0.007256772
Generation: 440. 誤差 = 0.0066971574
Generation: 450. 誤差 = 0.006208284
Generation: 460. 誤差 = 0.0057812096
Generation: 470. 誤差 = 0.0054081194
Generation: 480. 誤差 = 0.00508219
Generation: 490. 誤差 = 0.004797452
Generation: 500. 誤差 = 0.00454871
Generation: 510. 誤差 = 0.004331406
Generation: 520. 誤差 = 0.004141571
Generation: 530. 誤差 = 0.00397573
Generation: 540. 誤差 = 0.0038308513
Generation: 550. 誤差 = 0.0037042843
Generation: 560. 誤差 = 0.0035937165
Generation: 570. 誤差 = 0.0034971223
Generation: 580. 誤差 = 0.0034127382
Generation: 590. 誤差 = 0.0033390196
Generation: 600. 誤差 = 0.0032746193
Generation: 610. 誤差 = 0.003218359
Generation: 620. 誤差 = 0.003169208
Generation: 630. 誤差 = 0.0031262713
Generation: 640. 誤差 = 0.003088761
Generation: 650. 誤差 = 0.003055992
Generation: 660. 誤差 = 0.0030273667
Generation: 670. 誤差 = 0.0030023586
Generation: 680. 誤差 = 0.0029805114
Generation: 690. 誤差 = 0.0029614256
Generation: 700. 誤差 = 0.0029447514
Generation: 710. 誤差 = 0.0029301855
Generation: 720. 誤差 = 0.0029174609
Generation: 730. 誤差 = 0.0029063437
Generation: 740. 誤差 = 0.0028966325
Generation: 750. 誤差 = 0.0028881482
Generation: 760. 誤差 = 0.0028807365
Generation: 770. 誤差 = 0.0028742617
Generation: 780. 誤差 = 0.0028686062
Generation: 790. 誤差 = 0.0028636646
Generation: 800. 誤差 = 0.0028593473
Generation: 810. 誤差 = 0.0028555759
Generation: 820. 誤差 = 0.002852282
Generation: 830. 誤差 = 0.0028494035
Generation: 840. 誤差 = 0.002846889
Generation: 850. 誤差 = 0.0028446931
Generation: 860. 誤差 = 0.0028427732
Generation: 870. 誤差 = 0.0028410966
Generation: 880. 誤差 = 0.0028396326
Generation: 890. 誤差 = 0.0028383522
Generation: 900. 誤差 = 0.002837235
Generation: 910. 誤差 = 0.002836259
Generation: 920. 誤差 = 0.0028354058
Generation: 930. 誤差 = 0.0028346605
Generation: 940. 誤差 = 0.00283401
Generation: 950. 誤差 = 0.002833441
Generation: 960. 誤差 = 0.002832944
Generation: 970. 誤差 = 0.0028325098
Generation: 980. 誤差 = 0.0028321315
Generation: 990. 誤差 = 0.0028318004
Generation: 1000. 誤差 = 0.0028315105
W: [[0.49485454]]
b: [1.9951764]

単純パーセプトロン

OR回路


[try]

  • np.random.seed(0)をnp.random.seed(1)に変更
  • エポック数を100に変更
  • AND回路, XOR回路に変更
  • OR回路にしてバッチサイズを10に変更
  • エポック数を300に変更しよう

In [15]:
import tensorflow as tf

# logging levelを変更
tf.logging.set_verbosity(tf.logging.ERROR)

# モジュール読み込み
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import SGD
 
# 乱数を固定値で初期化
np.random.seed(1)

# シグモイドの単純パーセプトロン作成
model = Sequential()
model.add(Dense(input_dim=2, output_dim=1))
model.add(Activation('sigmoid'))
model.summary()
model.compile(loss='binary_crossentropy', optimizer=SGD(lr=0.1))

# トレーニング用入力 X と正解データ T
X = np.array( [[0,0], [0,1], [1,0], [1,1]] )

T = np.array( [[0], [1], [1], [1]] ) #OR
#T = np.array( [[0], [1], [1], [0]] ) #XOR
#T = np.array( [[0], [0], [0], [1]] ) #AND


# トレーニング
model.fit(X, T, epochs=300, batch_size=10)
 
# トレーニングの入力を流用して実際に分類
Y = model.predict_classes(X, batch_size=10)

print("TEST")
print(Y == T)
/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:17: UserWarning: Update your `Dense` call to the Keras 2 API: `Dense(input_dim=2, units=1)`
Model: "sequential_16"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_19 (Dense)             (None, 1)                 3         
_________________________________________________________________
activation_19 (Activation)   (None, 1)                 0         
=================================================================
Total params: 3
Trainable params: 3
Non-trainable params: 0
_________________________________________________________________
Epoch 1/300
4/4 [==============================] - 0s 30ms/step - loss: 0.4980
Epoch 2/300
4/4 [==============================] - 0s 1ms/step - loss: 0.4908
Epoch 3/300
4/4 [==============================] - 0s 975us/step - loss: 0.4841
Epoch 4/300
4/4 [==============================] - 0s 941us/step - loss: 0.4778
Epoch 5/300
4/4 [==============================] - 0s 866us/step - loss: 0.4719
Epoch 6/300
4/4 [==============================] - 0s 1ms/step - loss: 0.4662
Epoch 7/300
4/4 [==============================] - 0s 728us/step - loss: 0.4609
Epoch 8/300
4/4 [==============================] - 0s 839us/step - loss: 0.4559
Epoch 9/300
4/4 [==============================] - 0s 637us/step - loss: 0.4511
Epoch 10/300
4/4 [==============================] - 0s 457us/step - loss: 0.4466
Epoch 11/300
4/4 [==============================] - 0s 673us/step - loss: 0.4423
Epoch 12/300
4/4 [==============================] - 0s 611us/step - loss: 0.4382
Epoch 13/300
4/4 [==============================] - 0s 505us/step - loss: 0.4342
Epoch 14/300
4/4 [==============================] - 0s 781us/step - loss: 0.4305
Epoch 15/300
4/4 [==============================] - 0s 809us/step - loss: 0.4269
Epoch 16/300
4/4 [==============================] - 0s 567us/step - loss: 0.4235
Epoch 17/300
4/4 [==============================] - 0s 592us/step - loss: 0.4203
Epoch 18/300
4/4 [==============================] - 0s 1ms/step - loss: 0.4171
Epoch 19/300
4/4 [==============================] - 0s 800us/step - loss: 0.4141
Epoch 20/300
4/4 [==============================] - 0s 620us/step - loss: 0.4113
Epoch 21/300
4/4 [==============================] - 0s 651us/step - loss: 0.4085
Epoch 22/300
4/4 [==============================] - 0s 994us/step - loss: 0.4058
Epoch 23/300
4/4 [==============================] - 0s 798us/step - loss: 0.4032
Epoch 24/300
4/4 [==============================] - 0s 733us/step - loss: 0.4007
Epoch 25/300
4/4 [==============================] - 0s 601us/step - loss: 0.3983
Epoch 26/300
4/4 [==============================] - 0s 1ms/step - loss: 0.3960
Epoch 27/300
4/4 [==============================] - 0s 887us/step - loss: 0.3938
Epoch 28/300
4/4 [==============================] - 0s 580us/step - loss: 0.3916
Epoch 29/300
4/4 [==============================] - 0s 623us/step - loss: 0.3895
Epoch 30/300
4/4 [==============================] - 0s 517us/step - loss: 0.3874
Epoch 31/300
4/4 [==============================] - 0s 564us/step - loss: 0.3855
Epoch 32/300
4/4 [==============================] - 0s 553us/step - loss: 0.3835
Epoch 33/300
4/4 [==============================] - 0s 840us/step - loss: 0.3817
Epoch 34/300
4/4 [==============================] - 0s 567us/step - loss: 0.3798
Epoch 35/300
4/4 [==============================] - 0s 657us/step - loss: 0.3780
Epoch 36/300
4/4 [==============================] - 0s 657us/step - loss: 0.3763
Epoch 37/300
4/4 [==============================] - 0s 878us/step - loss: 0.3746
Epoch 38/300
4/4 [==============================] - 0s 481us/step - loss: 0.3730
Epoch 39/300
4/4 [==============================] - 0s 797us/step - loss: 0.3713
Epoch 40/300
4/4 [==============================] - 0s 670us/step - loss: 0.3698
Epoch 41/300
4/4 [==============================] - 0s 706us/step - loss: 0.3682
Epoch 42/300
4/4 [==============================] - 0s 915us/step - loss: 0.3667
Epoch 43/300
4/4 [==============================] - 0s 1ms/step - loss: 0.3652
Epoch 44/300
4/4 [==============================] - 0s 825us/step - loss: 0.3638
Epoch 45/300
4/4 [==============================] - 0s 512us/step - loss: 0.3623
Epoch 46/300
4/4 [==============================] - 0s 543us/step - loss: 0.3609
Epoch 47/300
4/4 [==============================] - 0s 594us/step - loss: 0.3596
Epoch 48/300
4/4 [==============================] - 0s 619us/step - loss: 0.3582
Epoch 49/300
4/4 [==============================] - 0s 1ms/step - loss: 0.3569
Epoch 50/300
4/4 [==============================] - 0s 869us/step - loss: 0.3556
Epoch 51/300
4/4 [==============================] - 0s 658us/step - loss: 0.3543
Epoch 52/300
4/4 [==============================] - 0s 975us/step - loss: 0.3530
Epoch 53/300
4/4 [==============================] - 0s 1ms/step - loss: 0.3518
Epoch 54/300
4/4 [==============================] - 0s 742us/step - loss: 0.3506
Epoch 55/300
4/4 [==============================] - 0s 800us/step - loss: 0.3494
Epoch 56/300
4/4 [==============================] - 0s 621us/step - loss: 0.3482
Epoch 57/300
4/4 [==============================] - 0s 1ms/step - loss: 0.3470
Epoch 58/300
4/4 [==============================] - 0s 920us/step - loss: 0.3458
Epoch 59/300
4/4 [==============================] - 0s 566us/step - loss: 0.3447
Epoch 60/300
4/4 [==============================] - 0s 613us/step - loss: 0.3436
Epoch 61/300
4/4 [==============================] - 0s 621us/step - loss: 0.3425
Epoch 62/300
4/4 [==============================] - 0s 764us/step - loss: 0.3414
Epoch 63/300
4/4 [==============================] - 0s 656us/step - loss: 0.3403
Epoch 64/300
4/4 [==============================] - 0s 738us/step - loss: 0.3392
Epoch 65/300
4/4 [==============================] - 0s 777us/step - loss: 0.3381
Epoch 66/300
4/4 [==============================] - 0s 1ms/step - loss: 0.3371
Epoch 67/300
4/4 [==============================] - 0s 619us/step - loss: 0.3361
Epoch 68/300
4/4 [==============================] - 0s 2ms/step - loss: 0.3350
Epoch 69/300
4/4 [==============================] - 0s 783us/step - loss: 0.3340
Epoch 70/300
4/4 [==============================] - 0s 754us/step - loss: 0.3330
Epoch 71/300
4/4 [==============================] - 0s 2ms/step - loss: 0.3320
Epoch 72/300
4/4 [==============================] - 0s 944us/step - loss: 0.3310
Epoch 73/300
4/4 [==============================] - 0s 648us/step - loss: 0.3300
Epoch 74/300
4/4 [==============================] - 0s 615us/step - loss: 0.3291
Epoch 75/300
4/4 [==============================] - 0s 1ms/step - loss: 0.3281
Epoch 76/300
4/4 [==============================] - 0s 715us/step - loss: 0.3271
Epoch 77/300
4/4 [==============================] - 0s 881us/step - loss: 0.3262
Epoch 78/300
4/4 [==============================] - 0s 665us/step - loss: 0.3253
Epoch 79/300
4/4 [==============================] - 0s 750us/step - loss: 0.3243
Epoch 80/300
4/4 [==============================] - 0s 1ms/step - loss: 0.3234
Epoch 81/300
4/4 [==============================] - 0s 723us/step - loss: 0.3225
Epoch 82/300
4/4 [==============================] - 0s 905us/step - loss: 0.3216
Epoch 83/300
4/4 [==============================] - 0s 931us/step - loss: 0.3207
Epoch 84/300
4/4 [==============================] - 0s 1ms/step - loss: 0.3198
Epoch 85/300
4/4 [==============================] - 0s 623us/step - loss: 0.3189
Epoch 86/300
4/4 [==============================] - 0s 683us/step - loss: 0.3180
Epoch 87/300
4/4 [==============================] - 0s 757us/step - loss: 0.3172
Epoch 88/300
4/4 [==============================] - 0s 1ms/step - loss: 0.3163
Epoch 89/300
4/4 [==============================] - 0s 678us/step - loss: 0.3154
Epoch 90/300
4/4 [==============================] - 0s 767us/step - loss: 0.3146
Epoch 91/300
4/4 [==============================] - 0s 707us/step - loss: 0.3137
Epoch 92/300
4/4 [==============================] - 0s 639us/step - loss: 0.3129
Epoch 93/300
4/4 [==============================] - 0s 708us/step - loss: 0.3121
Epoch 94/300
4/4 [==============================] - 0s 1ms/step - loss: 0.3112
Epoch 95/300
4/4 [==============================] - 0s 681us/step - loss: 0.3104
Epoch 96/300
4/4 [==============================] - 0s 1ms/step - loss: 0.3096
Epoch 97/300
4/4 [==============================] - 0s 955us/step - loss: 0.3088
Epoch 98/300
4/4 [==============================] - 0s 738us/step - loss: 0.3080
Epoch 99/300
4/4 [==============================] - 0s 875us/step - loss: 0.3071
Epoch 100/300
4/4 [==============================] - 0s 855us/step - loss: 0.3063
Epoch 101/300
4/4 [==============================] - 0s 853us/step - loss: 0.3056
Epoch 102/300
4/4 [==============================] - 0s 690us/step - loss: 0.3048
Epoch 103/300
4/4 [==============================] - 0s 733us/step - loss: 0.3040
Epoch 104/300
4/4 [==============================] - 0s 785us/step - loss: 0.3032
Epoch 105/300
4/4 [==============================] - 0s 909us/step - loss: 0.3024
Epoch 106/300
4/4 [==============================] - 0s 711us/step - loss: 0.3016
Epoch 107/300
4/4 [==============================] - 0s 1ms/step - loss: 0.3009
Epoch 108/300
4/4 [==============================] - 0s 879us/step - loss: 0.3001
Epoch 109/300
4/4 [==============================] - 0s 730us/step - loss: 0.2993
Epoch 110/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2986
Epoch 111/300
4/4 [==============================] - 0s 671us/step - loss: 0.2978
Epoch 112/300
4/4 [==============================] - 0s 676us/step - loss: 0.2971
Epoch 113/300
4/4 [==============================] - 0s 683us/step - loss: 0.2963
Epoch 114/300
4/4 [==============================] - 0s 761us/step - loss: 0.2956
Epoch 115/300
4/4 [==============================] - 0s 723us/step - loss: 0.2949
Epoch 116/300
4/4 [==============================] - 0s 534us/step - loss: 0.2941
Epoch 117/300
4/4 [==============================] - 0s 842us/step - loss: 0.2934
Epoch 118/300
4/4 [==============================] - 0s 911us/step - loss: 0.2927
Epoch 119/300
4/4 [==============================] - 0s 610us/step - loss: 0.2920
Epoch 120/300
4/4 [==============================] - 0s 490us/step - loss: 0.2912
Epoch 121/300
4/4 [==============================] - 0s 529us/step - loss: 0.2905
Epoch 122/300
4/4 [==============================] - 0s 561us/step - loss: 0.2898
Epoch 123/300
4/4 [==============================] - 0s 885us/step - loss: 0.2891
Epoch 124/300
4/4 [==============================] - 0s 586us/step - loss: 0.2884
Epoch 125/300
4/4 [==============================] - 0s 819us/step - loss: 0.2877
Epoch 126/300
4/4 [==============================] - 0s 644us/step - loss: 0.2870
Epoch 127/300
4/4 [==============================] - 0s 625us/step - loss: 0.2863
Epoch 128/300
4/4 [==============================] - 0s 908us/step - loss: 0.2856
Epoch 129/300
4/4 [==============================] - 0s 586us/step - loss: 0.2849
Epoch 130/300
4/4 [==============================] - 0s 583us/step - loss: 0.2843
Epoch 131/300
4/4 [==============================] - 0s 586us/step - loss: 0.2836
Epoch 132/300
4/4 [==============================] - 0s 580us/step - loss: 0.2829
Epoch 133/300
4/4 [==============================] - 0s 767us/step - loss: 0.2822
Epoch 134/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2816
Epoch 135/300
4/4 [==============================] - 0s 960us/step - loss: 0.2809
Epoch 136/300
4/4 [==============================] - 0s 2ms/step - loss: 0.2802
Epoch 137/300
4/4 [==============================] - 0s 2ms/step - loss: 0.2796
Epoch 138/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2789
Epoch 139/300
4/4 [==============================] - 0s 3ms/step - loss: 0.2783
Epoch 140/300
4/4 [==============================] - 0s 3ms/step - loss: 0.2776
Epoch 141/300
4/4 [==============================] - 0s 843us/step - loss: 0.2770
Epoch 142/300
4/4 [==============================] - 0s 2ms/step - loss: 0.2763
Epoch 143/300
4/4 [==============================] - 0s 3ms/step - loss: 0.2757
Epoch 144/300
4/4 [==============================] - 0s 2ms/step - loss: 0.2750
Epoch 145/300
4/4 [==============================] - 0s 3ms/step - loss: 0.2744
Epoch 146/300
4/4 [==============================] - 0s 2ms/step - loss: 0.2737
Epoch 147/300
4/4 [==============================] - 0s 2ms/step - loss: 0.2731
Epoch 148/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2725
Epoch 149/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2719
Epoch 150/300
4/4 [==============================] - 0s 575us/step - loss: 0.2712
Epoch 151/300
4/4 [==============================] - 0s 874us/step - loss: 0.2706
Epoch 152/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2700
Epoch 153/300
4/4 [==============================] - 0s 826us/step - loss: 0.2694
Epoch 154/300
4/4 [==============================] - 0s 825us/step - loss: 0.2688
Epoch 155/300
4/4 [==============================] - 0s 743us/step - loss: 0.2682
Epoch 156/300
4/4 [==============================] - 0s 711us/step - loss: 0.2676
Epoch 157/300
4/4 [==============================] - 0s 2ms/step - loss: 0.2669
Epoch 158/300
4/4 [==============================] - 0s 5ms/step - loss: 0.2663
Epoch 159/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2657
Epoch 160/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2651
Epoch 161/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2646
Epoch 162/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2640
Epoch 163/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2634
Epoch 164/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2628
Epoch 165/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2622
Epoch 166/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2616
Epoch 167/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2610
Epoch 168/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2605
Epoch 169/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2599
Epoch 170/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2593
Epoch 171/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2587
Epoch 172/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2582
Epoch 173/300
4/4 [==============================] - 0s 946us/step - loss: 0.2576
Epoch 174/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2570
Epoch 175/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2565
Epoch 176/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2559
Epoch 177/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2554
Epoch 178/300
4/4 [==============================] - 0s 974us/step - loss: 0.2548
Epoch 179/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2543
Epoch 180/300
4/4 [==============================] - 0s 878us/step - loss: 0.2537
Epoch 181/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2532
Epoch 182/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2526
Epoch 183/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2521
Epoch 184/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2515
Epoch 185/300
4/4 [==============================] - 0s 916us/step - loss: 0.2510
Epoch 186/300
4/4 [==============================] - 0s 979us/step - loss: 0.2504
Epoch 187/300
4/4 [==============================] - 0s 2ms/step - loss: 0.2499
Epoch 188/300
4/4 [==============================] - 0s 818us/step - loss: 0.2494
Epoch 189/300
4/4 [==============================] - 0s 2ms/step - loss: 0.2489
Epoch 190/300
4/4 [==============================] - 0s 958us/step - loss: 0.2483
Epoch 191/300
4/4 [==============================] - 0s 814us/step - loss: 0.2478
Epoch 192/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2473
Epoch 193/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2467
Epoch 194/300
4/4 [==============================] - 0s 901us/step - loss: 0.2462
Epoch 195/300
4/4 [==============================] - 0s 2ms/step - loss: 0.2457
Epoch 196/300
4/4 [==============================] - 0s 865us/step - loss: 0.2452
Epoch 197/300
4/4 [==============================] - 0s 832us/step - loss: 0.2447
Epoch 198/300
4/4 [==============================] - 0s 834us/step - loss: 0.2442
Epoch 199/300
4/4 [==============================] - 0s 776us/step - loss: 0.2437
Epoch 200/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2431
Epoch 201/300
4/4 [==============================] - 0s 936us/step - loss: 0.2426
Epoch 202/300
4/4 [==============================] - 0s 938us/step - loss: 0.2421
Epoch 203/300
4/4 [==============================] - 0s 971us/step - loss: 0.2416
Epoch 204/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2411
Epoch 205/300
4/4 [==============================] - 0s 995us/step - loss: 0.2406
Epoch 206/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2401
Epoch 207/300
4/4 [==============================] - 0s 746us/step - loss: 0.2396
Epoch 208/300
4/4 [==============================] - 0s 856us/step - loss: 0.2392
Epoch 209/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2387
Epoch 210/300
4/4 [==============================] - 0s 790us/step - loss: 0.2382
Epoch 211/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2377
Epoch 212/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2372
Epoch 213/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2367
Epoch 214/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2362
Epoch 215/300
4/4 [==============================] - 0s 937us/step - loss: 0.2358
Epoch 216/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2353
Epoch 217/300
4/4 [==============================] - 0s 846us/step - loss: 0.2348
Epoch 218/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2343
Epoch 219/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2339
Epoch 220/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2334
Epoch 221/300
4/4 [==============================] - 0s 1000us/step - loss: 0.2329
Epoch 222/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2324
Epoch 223/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2320
Epoch 224/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2315
Epoch 225/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2311
Epoch 226/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2306
Epoch 227/300
4/4 [==============================] - 0s 919us/step - loss: 0.2301
Epoch 228/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2297
Epoch 229/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2292
Epoch 230/300
4/4 [==============================] - 0s 3ms/step - loss: 0.2288
Epoch 231/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2283
Epoch 232/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2279
Epoch 233/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2274
Epoch 234/300
4/4 [==============================] - 0s 2ms/step - loss: 0.2270
Epoch 235/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2265
Epoch 236/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2261
Epoch 237/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2256
Epoch 238/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2252
Epoch 239/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2248
Epoch 240/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2243
Epoch 241/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2239
Epoch 242/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2234
Epoch 243/300
4/4 [==============================] - 0s 829us/step - loss: 0.2230
Epoch 244/300
4/4 [==============================] - 0s 871us/step - loss: 0.2226
Epoch 245/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2222
Epoch 246/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2217
Epoch 247/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2213
Epoch 248/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2209
Epoch 249/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2204
Epoch 250/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2200
Epoch 251/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2196
Epoch 252/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2192
Epoch 253/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2188
Epoch 254/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2184
Epoch 255/300
4/4 [==============================] - 0s 851us/step - loss: 0.2179
Epoch 256/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2175
Epoch 257/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2171
Epoch 258/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2167
Epoch 259/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2163
Epoch 260/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2159
Epoch 261/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2155
Epoch 262/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2151
Epoch 263/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2147
Epoch 264/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2143
Epoch 265/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2139
Epoch 266/300
4/4 [==============================] - 0s 997us/step - loss: 0.2135
Epoch 267/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2131
Epoch 268/300
4/4 [==============================] - 0s 2ms/step - loss: 0.2127
Epoch 269/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2123
Epoch 270/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2119
Epoch 271/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2115
Epoch 272/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2111
Epoch 273/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2107
Epoch 274/300
4/4 [==============================] - 0s 920us/step - loss: 0.2103
Epoch 275/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2099
Epoch 276/300
4/4 [==============================] - 0s 2ms/step - loss: 0.2096
Epoch 277/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2092
Epoch 278/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2088
Epoch 279/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2084
Epoch 280/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2080
Epoch 281/300
4/4 [==============================] - 0s 2ms/step - loss: 0.2076
Epoch 282/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2073
Epoch 283/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2069
Epoch 284/300
4/4 [==============================] - 0s 838us/step - loss: 0.2065
Epoch 285/300
4/4 [==============================] - 0s 2ms/step - loss: 0.2061
Epoch 286/300
4/4 [==============================] - 0s 983us/step - loss: 0.2058
Epoch 287/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2054
Epoch 288/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2050
Epoch 289/300
4/4 [==============================] - 0s 960us/step - loss: 0.2047
Epoch 290/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2043
Epoch 291/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2039
Epoch 292/300
4/4 [==============================] - 0s 802us/step - loss: 0.2036
Epoch 293/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2032
Epoch 294/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2028
Epoch 295/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2025
Epoch 296/300
4/4 [==============================] - 0s 1ms/step - loss: 0.2021
Epoch 297/300
4/4 [==============================] - 0s 2ms/step - loss: 0.2018
Epoch 298/300
4/4 [==============================] - 0s 2ms/step - loss: 0.2014
Epoch 299/300
4/4 [==============================] - 0s 892us/step - loss: 0.2010
Epoch 300/300
4/4 [==============================] - 0s 2ms/step - loss: 0.2007
TEST
[[ True]
 [ True]
 [ True]
 [ True]]

分類 (iris)


[try]

  • 中間層の活性関数をsigmoidに変更しよう
  • SGDをimportしoptimizerをSGD(lr=0.1)に変更しよう

In [36]:
import tensorflow as tf

# logging levelを変更
tf.logging.set_verbosity(tf.logging.ERROR)

import matplotlib.pyplot as plt
from sklearn import datasets
iris = datasets.load_iris()
x = iris.data
d = iris.target

# from sklearn.cross_validation import train_test_split
from sklearn.model_selection import train_test_split
x_train, x_test, d_train, d_test = train_test_split(x, d, test_size=0.2)

from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import SGD

#モデルの設定
model = Sequential()
model.add(Dense(12, input_dim=4))
#model.add(Activation('relu'))
model.add(Activation('sigmoid'))
model.add(Dense(3, input_dim=12))
model.add(Activation('softmax'))
model.summary()

model.compile(optimizer=SGD(lr=0.1), loss='sparse_categorical_crossentropy', metrics=['accuracy'])

history = model.fit(x_train, d_train, batch_size=5, epochs=20, verbose=1, validation_data=(x_test, d_test))
loss = model.evaluate(x_test, d_test, verbose=0)

#Accuracy
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.ylim(0, 1.0)
plt.show()
Model: "sequential_29"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_44 (Dense)             (None, 12)                60        
_________________________________________________________________
activation_44 (Activation)   (None, 12)                0         
_________________________________________________________________
dense_45 (Dense)             (None, 3)                 39        
_________________________________________________________________
activation_45 (Activation)   (None, 3)                 0         
=================================================================
Total params: 99
Trainable params: 99
Non-trainable params: 0
_________________________________________________________________
Train on 120 samples, validate on 30 samples
Epoch 1/20
120/120 [==============================] - 0s 2ms/step - loss: 1.0374 - accuracy: 0.5417 - val_loss: 0.9102 - val_accuracy: 0.9667
Epoch 2/20
120/120 [==============================] - 0s 604us/step - loss: 0.8267 - accuracy: 0.7333 - val_loss: 0.8756 - val_accuracy: 0.5333
Epoch 3/20
120/120 [==============================] - 0s 530us/step - loss: 0.6858 - accuracy: 0.7333 - val_loss: 0.6795 - val_accuracy: 0.8000
Epoch 4/20
120/120 [==============================] - 0s 534us/step - loss: 0.6112 - accuracy: 0.7667 - val_loss: 0.6911 - val_accuracy: 0.5333
Epoch 5/20
120/120 [==============================] - 0s 499us/step - loss: 0.5430 - accuracy: 0.7833 - val_loss: 0.5866 - val_accuracy: 0.8333
Epoch 6/20
120/120 [==============================] - 0s 525us/step - loss: 0.5024 - accuracy: 0.8167 - val_loss: 0.5592 - val_accuracy: 0.7667
Epoch 7/20
120/120 [==============================] - 0s 496us/step - loss: 0.4602 - accuracy: 0.8250 - val_loss: 0.5003 - val_accuracy: 0.9667
Epoch 8/20
120/120 [==============================] - 0s 489us/step - loss: 0.4396 - accuracy: 0.8917 - val_loss: 0.5143 - val_accuracy: 0.7000
Epoch 9/20
120/120 [==============================] - 0s 480us/step - loss: 0.4112 - accuracy: 0.8667 - val_loss: 0.5560 - val_accuracy: 0.6000
Epoch 10/20
120/120 [==============================] - 0s 500us/step - loss: 0.3980 - accuracy: 0.8667 - val_loss: 0.5788 - val_accuracy: 0.5667
Epoch 11/20
120/120 [==============================] - 0s 492us/step - loss: 0.3900 - accuracy: 0.8750 - val_loss: 0.4363 - val_accuracy: 0.9667
Epoch 12/20
120/120 [==============================] - 0s 594us/step - loss: 0.3744 - accuracy: 0.8750 - val_loss: 0.4287 - val_accuracy: 0.9667
Epoch 13/20
120/120 [==============================] - 0s 510us/step - loss: 0.3462 - accuracy: 0.9250 - val_loss: 0.5225 - val_accuracy: 0.6000
Epoch 14/20
120/120 [==============================] - 0s 526us/step - loss: 0.3513 - accuracy: 0.9083 - val_loss: 0.4285 - val_accuracy: 0.8000
Epoch 15/20
120/120 [==============================] - 0s 504us/step - loss: 0.3342 - accuracy: 0.9167 - val_loss: 0.3758 - val_accuracy: 0.9667
Epoch 16/20
120/120 [==============================] - 0s 519us/step - loss: 0.3269 - accuracy: 0.9000 - val_loss: 0.4022 - val_accuracy: 0.8333
Epoch 17/20
120/120 [==============================] - 0s 562us/step - loss: 0.3171 - accuracy: 0.8583 - val_loss: 0.3855 - val_accuracy: 0.8667
Epoch 18/20
120/120 [==============================] - 0s 532us/step - loss: 0.2984 - accuracy: 0.9083 - val_loss: 0.4175 - val_accuracy: 0.7667
Epoch 19/20
120/120 [==============================] - 0s 507us/step - loss: 0.2740 - accuracy: 0.9417 - val_loss: 0.4773 - val_accuracy: 0.6333
Epoch 20/20
120/120 [==============================] - 0s 491us/step - loss: 0.2835 - accuracy: 0.9000 - val_loss: 0.2818 - val_accuracy: 1.0000

分類 (mnist)


[try]

  • load_mnistのone_hot_labelをFalseに変更しよう (error)
  • 誤差関数をsparse_categorical_crossentropyに変更しよう
  • Adamの引数の値を変更しよう

In [41]:
import tensorflow as tf

# logging levelを変更
tf.logging.set_verbosity(tf.logging.ERROR)

# 必要なライブラリのインポート
import keras
import matplotlib.pyplot as plt
from data.mnist import load_mnist

(x_train, d_train), (x_test, d_test) = load_mnist(normalize=True, one_hot_label=True)

# 必要なライブラリのインポート、最適化手法はAdamを使う
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.optimizers import Adam

# モデル作成
model = Sequential()
model.add(Dense(512, activation='relu', input_shape=(784,)))
model.add(Dropout(0.2))
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(10, activation='softmax'))
model.summary()

# バッチサイズ、エポック数
batch_size = 128
epochs = 20

model.compile(loss='sparse_categorical_crossentropy', 
              optimizer=Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False), 
              metrics=['accuracy'])

history = model.fit(x_train, d_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(x_test, d_test))
loss = model.evaluate(x_test, d_test, verbose=0)
print('Test loss:', loss[0])
print('Test accuracy:', loss[1])
#Accuracy
plt.plot(history.history['acc'])
plt.plot(history.history['val_acc'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
# plt.ylim(0, 1.0)
plt.show()
Model: "sequential_30"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_79 (Dense)             (None, 512)               401920    
_________________________________________________________________
dropout_55 (Dropout)         (None, 512)               0         
_________________________________________________________________
dense_80 (Dense)             (None, 512)               262656    
_________________________________________________________________
dropout_56 (Dropout)         (None, 512)               0         
_________________________________________________________________
dense_81 (Dense)             (None, 10)                5130      
=================================================================
Total params: 669,706
Trainable params: 669,706
Non-trainable params: 0
_________________________________________________________________
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-41-239b3c24ad6b> in <module>()
     33               metrics=['accuracy'])
     34 
---> 35 history = model.fit(x_train, d_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(x_test, d_test))
     36 loss = model.evaluate(x_test, d_test, verbose=0)
     37 print('Test loss:', loss[0])

/usr/local/lib/python3.6/dist-packages/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
   1152             sample_weight=sample_weight,
   1153             class_weight=class_weight,
-> 1154             batch_size=batch_size)
   1155 
   1156         # Prepare validation data.

/usr/local/lib/python3.6/dist-packages/keras/engine/training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_array_lengths, batch_size)
    619                 feed_output_shapes,
    620                 check_batch_axis=False,  # Don't enforce the batch size.
--> 621                 exception_prefix='target')
    622 
    623             # Generate sample-wise weight values given the `sample_weight` and

/usr/local/lib/python3.6/dist-packages/keras/engine/training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
    143                             ': expected ' + names[i] + ' to have shape ' +
    144                             str(shape) + ' but got array with shape ' +
--> 145                             str(data_shape))
    146     return data
    147 

ValueError: Error when checking target: expected dense_81 to have shape (1,) but got array with shape (10,)

CNN分類 (mnist)

実行に時間がかかるため割愛

※↑分類(mnist)の[try]をこちらで実行

In [54]:
import tensorflow as tf

# logging levelを変更
tf.logging.set_verbosity(tf.logging.ERROR)

# 必要なライブラリのインポート
import keras
import matplotlib.pyplot as plt
from keras.datasets import mnist
from data.mnist import load_mnist

(x_train, d_train), (x_test, d_test) = load_mnist(normalize=True, one_hot_label=False)


# 行列として入力するための加工
batch_size = 128
num_classes = 10
epochs = 20

img_rows, img_cols = 28, 28

x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)


# 必要なライブラリのインポート、最適化手法はAdamを使う
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.optimizers import Adam

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
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(num_classes, activation='softmax'))
model.summary()

# バッチサイズ、エポック数
batch_size = 128
epochs = 20

model.compile(loss='sparse_categorical_crossentropy', optimizer=Adam(learning_rate=0.001, beta_1=0.0001, beta_2=0.99, amsgrad=False), metrics=['accuracy'])
history = model.fit(x_train, d_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(x_test, d_test))

#Accuracy
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
# plt.ylim(0, 1.0)
plt.show()
Model: "sequential_43"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_35 (Conv2D)           (None, 26, 26, 32)        320       
_________________________________________________________________
conv2d_36 (Conv2D)           (None, 24, 24, 64)        18496     
_________________________________________________________________
max_pooling2d_18 (MaxPooling (None, 12, 12, 64)        0         
_________________________________________________________________
dropout_81 (Dropout)         (None, 12, 12, 64)        0         
_________________________________________________________________
flatten_24 (Flatten)         (None, 9216)              0         
_________________________________________________________________
dense_106 (Dense)            (None, 128)               1179776   
_________________________________________________________________
dropout_82 (Dropout)         (None, 128)               0         
_________________________________________________________________
dense_107 (Dense)            (None, 10)                1290      
=================================================================
Total params: 1,199,882
Trainable params: 1,199,882
Non-trainable params: 0
_________________________________________________________________
Train on 60000 samples, validate on 10000 samples
Epoch 1/20
60000/60000 [==============================] - 6s 93us/step - loss: 0.2312 - accuracy: 0.9291 - val_loss: 0.0567 - val_accuracy: 0.9817
Epoch 2/20
60000/60000 [==============================] - 5s 81us/step - loss: 0.0801 - accuracy: 0.9756 - val_loss: 0.0402 - val_accuracy: 0.9874
Epoch 3/20
60000/60000 [==============================] - 5s 80us/step - loss: 0.0602 - accuracy: 0.9816 - val_loss: 0.0362 - val_accuracy: 0.9874
Epoch 4/20
60000/60000 [==============================] - 5s 82us/step - loss: 0.0479 - accuracy: 0.9858 - val_loss: 0.0295 - val_accuracy: 0.9908
Epoch 5/20
60000/60000 [==============================] - 5s 82us/step - loss: 0.0402 - accuracy: 0.9872 - val_loss: 0.0294 - val_accuracy: 0.9909
Epoch 6/20
60000/60000 [==============================] - 5s 82us/step - loss: 0.0328 - accuracy: 0.9896 - val_loss: 0.0297 - val_accuracy: 0.9910
Epoch 7/20
60000/60000 [==============================] - 5s 82us/step - loss: 0.0294 - accuracy: 0.9906 - val_loss: 0.0266 - val_accuracy: 0.9920
Epoch 8/20
60000/60000 [==============================] - 5s 82us/step - loss: 0.0264 - accuracy: 0.9918 - val_loss: 0.0276 - val_accuracy: 0.9922
Epoch 9/20
60000/60000 [==============================] - 5s 80us/step - loss: 0.0235 - accuracy: 0.9922 - val_loss: 0.0289 - val_accuracy: 0.9926
Epoch 10/20
60000/60000 [==============================] - 5s 82us/step - loss: 0.0230 - accuracy: 0.9928 - val_loss: 0.0267 - val_accuracy: 0.9925
Epoch 11/20
60000/60000 [==============================] - 5s 82us/step - loss: 0.0192 - accuracy: 0.9935 - val_loss: 0.0286 - val_accuracy: 0.9925
Epoch 12/20
60000/60000 [==============================] - 5s 82us/step - loss: 0.0188 - accuracy: 0.9938 - val_loss: 0.0284 - val_accuracy: 0.9926
Epoch 13/20
60000/60000 [==============================] - 5s 81us/step - loss: 0.0160 - accuracy: 0.9948 - val_loss: 0.0344 - val_accuracy: 0.9916
Epoch 14/20
60000/60000 [==============================] - 5s 84us/step - loss: 0.0147 - accuracy: 0.9951 - val_loss: 0.0333 - val_accuracy: 0.9923
Epoch 15/20
60000/60000 [==============================] - 5s 84us/step - loss: 0.0152 - accuracy: 0.9953 - val_loss: 0.0334 - val_accuracy: 0.9927
Epoch 16/20
60000/60000 [==============================] - 5s 82us/step - loss: 0.0130 - accuracy: 0.9956 - val_loss: 0.0363 - val_accuracy: 0.9927
Epoch 17/20
60000/60000 [==============================] - 5s 81us/step - loss: 0.0140 - accuracy: 0.9955 - val_loss: 0.0287 - val_accuracy: 0.9925
Epoch 18/20
60000/60000 [==============================] - 5s 81us/step - loss: 0.0136 - accuracy: 0.9956 - val_loss: 0.0304 - val_accuracy: 0.9934
Epoch 19/20
60000/60000 [==============================] - 5s 84us/step - loss: 0.0124 - accuracy: 0.9958 - val_loss: 0.0324 - val_accuracy: 0.9927
Epoch 20/20
60000/60000 [==============================] - 5s 81us/step - loss: 0.0114 - accuracy: 0.9962 - val_loss: 0.0298 - val_accuracy: 0.9931

cifar10

実行に時間がかかるため割愛

データセット cifar10
32x32ピクセルのカラー画像データ
10種のラベル「飛行機、自動車、鳥、猫、鹿、犬、蛙、馬、船、トラック」
トレーニングデータ数:50000, テストデータ数:10000
http://www.cs.toronto.edu/~kriz/cifar.html

In [51]:
import tensorflow as tf

# logging levelを変更
tf.logging.set_verbosity(tf.logging.ERROR)

#CIFAR-10のデータセットのインポート
from keras.datasets import cifar10
(x_train, d_train), (x_test, d_test) = cifar10.load_data()

#CIFAR-10の正規化
from keras.utils import to_categorical
  
# 特徴量の正規化
x_train = x_train/255.
x_test = x_test/255.
 
# クラスラベルの1-hotベクトル化
d_train = to_categorical(d_train, 10)
d_test = to_categorical(d_test, 10)
 
# CNNの構築
import keras
from keras.models import Sequential
from keras.layers.convolutional import Conv2D, MaxPooling2D
from keras.layers.core import Dense, Dropout, Activation, Flatten
import numpy as np
 
model = Sequential()
 
model.add(Conv2D(32, (3, 3), padding='same',input_shape=x_train.shape[1:]))
model.add(Activation('relu'))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
 
model.add(Conv2D(64, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
 
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(10))
model.add(Activation('softmax'))
 
# コンパイル
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
 
#訓練
history = model.fit(x_train, d_train, epochs=20)
 
# モデルの保存
model.save('./CIFAR-10.h5')
 
#評価 & 評価結果出力
print(model.evaluate(x_test, d_test))
Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
170500096/170498071 [==============================] - 4s 0us/step
Epoch 1/20
50000/50000 [==============================] - 17s 340us/step - loss: 1.5599 - accuracy: 0.4308
Epoch 2/20
50000/50000 [==============================] - 11s 215us/step - loss: 1.1602 - accuracy: 0.5857
Epoch 3/20
50000/50000 [==============================] - 11s 212us/step - loss: 1.0188 - accuracy: 0.6397
Epoch 4/20
50000/50000 [==============================] - 11s 211us/step - loss: 0.9356 - accuracy: 0.6722
Epoch 5/20
50000/50000 [==============================] - 11s 211us/step - loss: 0.8680 - accuracy: 0.6954
Epoch 6/20
50000/50000 [==============================] - 11s 214us/step - loss: 0.8189 - accuracy: 0.7114
Epoch 7/20
50000/50000 [==============================] - 11s 217us/step - loss: 0.7826 - accuracy: 0.7250
Epoch 8/20
50000/50000 [==============================] - 11s 217us/step - loss: 0.7546 - accuracy: 0.7347
Epoch 9/20
50000/50000 [==============================] - 11s 216us/step - loss: 0.7306 - accuracy: 0.7430
Epoch 10/20
50000/50000 [==============================] - 11s 218us/step - loss: 0.7026 - accuracy: 0.7531
Epoch 11/20
50000/50000 [==============================] - 11s 217us/step - loss: 0.6776 - accuracy: 0.7626
Epoch 12/20
50000/50000 [==============================] - 11s 214us/step - loss: 0.6608 - accuracy: 0.7678
Epoch 13/20
50000/50000 [==============================] - 11s 212us/step - loss: 0.6435 - accuracy: 0.7740
Epoch 14/20
50000/50000 [==============================] - 11s 213us/step - loss: 0.6248 - accuracy: 0.7806
Epoch 15/20
50000/50000 [==============================] - 11s 214us/step - loss: 0.6153 - accuracy: 0.7835
Epoch 16/20
50000/50000 [==============================] - 11s 214us/step - loss: 0.6101 - accuracy: 0.7846
Epoch 17/20
50000/50000 [==============================] - 11s 214us/step - loss: 0.5937 - accuracy: 0.7920
Epoch 18/20
50000/50000 [==============================] - 11s 213us/step - loss: 0.5802 - accuracy: 0.7968
Epoch 19/20
50000/50000 [==============================] - 11s 213us/step - loss: 0.5736 - accuracy: 0.7984
Epoch 20/20
50000/50000 [==============================] - 11s 213us/step - loss: 0.5638 - accuracy: 0.8002
10000/10000 [==============================] - 1s 119us/step
[0.6743115463733673, 0.7720999717712402]

RNN

2進数足し算の予測

Keras RNNのドキュメント https://keras.io/ja/layers/recurrent/#simplernn


[try]

  • RNNの出力ノード数を128に変更
  • RNNの出力活性化関数を sigmoid に変更
  • RNNの出力活性化関数を tanh に変更
  • 最適化方法をadamに変更
  • RNNの入力 Dropout を0.5に設定
  • RNNの再帰 Dropout を0.3に設定
  • RNNのunrollをTrueに設定

In [64]:
import tensorflow as tf

# logging levelを変更
tf.logging.set_verbosity(tf.logging.ERROR)

import numpy as np
import matplotlib.pyplot as plt

import keras
from keras.models import Sequential
from keras.layers.core import Dense, Dropout,Activation
from keras.layers.wrappers import TimeDistributed
from keras.optimizers import SGD
from keras.layers.recurrent import SimpleRNN, LSTM, GRU


# データを用意
# 2進数の桁数
binary_dim = 8
# 最大値 + 1
largest_number = pow(2, binary_dim)

# largest_numberまで2進数を用意
binary = np.unpackbits(np.array([range(largest_number)], dtype=np.uint8).T,axis=1)[:, ::-1]


# A, B初期化 (a + b = d)
a_int = np.random.randint(largest_number/2, size=20000)
a_bin = binary[a_int] # binary encoding
b_int = np.random.randint(largest_number/2, size=20000)
b_bin = binary[b_int] # binary encoding

x_int = []
x_bin = []
for i in range(10000):
    x_int.append(np.array([a_int[i], b_int[i]]).T)
    x_bin.append(np.array([a_bin[i], b_bin[i]]).T)

x_int_test = []
x_bin_test = []
for i in range(10001, 20000):
    x_int_test.append(np.array([a_int[i], b_int[i]]).T)
    x_bin_test.append(np.array([a_bin[i], b_bin[i]]).T)

x_int = np.array(x_int)
x_bin = np.array(x_bin)
x_int_test = np.array(x_int_test)
x_bin_test = np.array(x_bin_test)


# 正解データ
d_int = a_int + b_int
d_bin = binary[d_int][0:10000]
d_bin_test = binary[d_int][10001:20000]

model = Sequential()

model.add(SimpleRNN(units=16,
               return_sequences=True,
               input_shape=[8, 2],
               go_backwards=False,
               activation='sigmoid',
               #activation='tanh',
               #dropout=0.5,
               recurrent_dropout=0.3,
               unroll = True,
            ))
# 出力層
model.add(Dense(1, activation='sigmoid', input_shape=(-1,2)))
model.summary()
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
# model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])

history = model.fit(x_bin, d_bin.reshape(-1, 8, 1), epochs=5, batch_size=2)

# テスト結果出力
score = model.evaluate(x_bin_test, d_bin_test.reshape(-1,8,1), verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
Model: "sequential_53"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
simple_rnn_10 (SimpleRNN)    (None, 8, 16)             304       
_________________________________________________________________
dense_117 (Dense)            (None, 8, 1)              17        
=================================================================
Total params: 321
Trainable params: 321
Non-trainable params: 0
_________________________________________________________________
Epoch 1/5
10000/10000 [==============================] - 25s 3ms/step - loss: 0.2499 - accuracy: 0.5173
Epoch 2/5
10000/10000 [==============================] - 24s 2ms/step - loss: 0.2398 - accuracy: 0.6140
Epoch 3/5
10000/10000 [==============================] - 26s 3ms/step - loss: 0.1944 - accuracy: 0.7209
Epoch 4/5
10000/10000 [==============================] - 24s 2ms/step - loss: 0.1315 - accuracy: 0.8327
Epoch 5/5
10000/10000 [==============================] - 25s 2ms/step - loss: 0.0744 - accuracy: 0.9199
Test loss: 0.03494271183676488
Test accuracy: 0.9707095623016357
In [ ]: