質問するログイン新規登録

質問編集履歴

1

学習プログラムの追加

2018/09/29 08:03

投稿

tagaa
tagaa

スコア13

title CHANGED
File without changes
body CHANGED
@@ -10,46 +10,134 @@
10
10
  よろしくお願いいたします。
11
11
 
12
12
 
13
- ### 学習サマリ
13
+ ### 学習プログラム(alexnet.py)
14
14
 
15
15
  ```ここに言語名を入力
16
- _________________________________________________________________
17
- Layer (type) Output Shape Param #
18
- =================================================================
19
- conv2d_1 (Conv2D) (None, 75, 75, 48) 17472
20
- _________________________________________________________________
21
- max_pooling2d_1 (MaxPooling2 (None, 37, 37, 48) 0
22
- _________________________________________________________________
23
- batch_normalization_1 (Batch (None, 37, 37, 48) 192
24
- _________________________________________________________________
25
- conv2d_2 (Conv2D) (None, 13, 13, 128) 153728
26
- _________________________________________________________________
27
- max_pooling2d_2 (MaxPooling2 (None, 6, 6, 128) 0
28
- _________________________________________________________________
29
- batch_normalization_2 (Batch (None, 6, 6, 128) 512
30
- _________________________________________________________________
31
- conv2d_3 (Conv2D) (None, 6, 6, 192) 221376
32
- _________________________________________________________________
33
- conv2d_4 (Conv2D) (None, 6, 6, 192) 331968
34
- _________________________________________________________________
35
- conv2d_5 (Conv2D) (None, 6, 6, 128) 221312
36
- _________________________________________________________________
37
- max_pooling2d_3 (MaxPooling2 (None, 2, 2, 128) 0
38
- _________________________________________________________________
39
- batch_normalization_3 (Batch (None, 2, 2, 128) 512
40
- _________________________________________________________________
41
- flatten_1 (Flatten) (None, 512) 0
42
- _________________________________________________________________
43
- dense_1 (Dense) (None, 2048) 1050624
44
- _________________________________________________________________
45
- dropout_1 (Dropout) (None, 2048) 0
46
- _________________________________________________________________
47
- dense_2 (Dense) (None, 2048) 4196352
48
- _________________________________________________________________
49
- dropout_2 (Dropout) (None, 2048) 0
50
- _________________________________________________________________
51
- dense_3 (Dense) (None, 2) 4098
52
- =================================================================
16
+ # coding:utf-8
17
+
18
+ import keras
19
+ from keras.layers import Conv2D, MaxPooling2D, Lambda, Input, Dense, Flatten, BatchNormalization
20
+ from keras.utils import np_utils
21
+ from keras.models import Sequential
22
+ from keras.layers.convolutional import Conv2D, MaxPooling2D
23
+ from keras.layers.core import Dense, Dropout, Activation, Flatten
24
+ import numpy as np
25
+ from sklearn.model_selection import train_test_split
26
+ from PIL import Image
27
+ import glob
28
+ from keras.utils import plot_model
29
+ import matplotlib.pyplot as plt
30
+ import tensorflow as tf
31
+
32
+ folder = ["0","1"]
33
+ image_size = 224
34
+ epoch_size = 10
35
+
36
+ X = []
37
+ Y = []
38
+
39
+ for index, name in enumerate(folder):
40
+ dir = "./" + name
41
+ files = glob.glob(dir + "/*.jpg")
42
+ for i, file in enumerate(files):
43
+ image = Image.open(file)
44
+ image = image.convert("RGB")
45
+ image = image.resize((image_size, image_size))
46
+ data = np.asarray(image)
47
+ X.append(data)
48
+ Y.append(index)
49
+ #Xは画像データ、Yは正解ラベルのデータ
50
+ X = np.array(X)
51
+ Y = np.array(Y)
52
+ #画像データを0から1の範囲に変換
53
+ X = X.astype('float32')
54
+ X = X / 255.0
55
+
56
+ #正解ラベルの形式を変換
57
+ #つまり、ラベルを[0, 0, 0, 1]のようなベクトルにする。値はラベルの数に合わせる。
58
+ Y = np_utils.to_categorical(Y, 2)
59
+
60
+ # 学習用データとテストデータに分割
61
+ #train_test_split 関数はデータをランダムに、好きの割合で分割できる関数。
62
+ #X_train(訓練データ), X_test(テストデータ), y_train(訓練ラベル), y_test(テストラベル)
63
+ #test_sizeはテストデータにする割合
64
+ X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.25)
65
+
66
+ model = Sequential()
67
+
68
+ model.add(Conv2D(48, 11, strides=(3, 3), activation='relu', padding='same',input_shape=X_train.shape[1:]))
69
+ model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2)))
70
+ model.add(BatchNormalization())
71
+ model.add(Conv2D(128, 5, strides=(3, 3), activation='relu', padding='same'))
72
+ model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2)))
73
+ model.add(BatchNormalization())
74
+ model.add(Conv2D(192, 3, strides=(1, 1), activation='relu', padding='same'))
75
+ model.add(Conv2D(192, 3, strides=(1, 1), activation='relu', padding='same'))
76
+ model.add(Conv2D(128, 3, strides=(1, 1), activation='relu', padding='same'))
77
+ model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2)))
78
+ model.add(BatchNormalization())
79
+
80
+ model.add(Flatten())
81
+ model.add(Dense(2048, activation='relu'))
82
+ model.add(Dropout(0.5))
83
+ model.add(Dense(2048, activation='relu'))
84
+ model.add(Dropout(0.5))
85
+
86
+ model.add(Dense(2, activation='softmax'))
87
+ #model.add(Activation('softmax'))
88
+
89
+
90
+ model.summary();
91
+
92
+ model.compile(loss='categorical_crossentropy',optimizer='SGD',metrics=['accuracy'])
93
+
94
+ history = model.fit(X_train, y_train, epochs=epoch_size, verbose=1, validation_split=0.15)
95
+
96
+ #評価 & 評価結果出力
97
+ #print(model.evaluate(X_test, y_test))
98
+ score = model.evaluate(X_test, y_test, verbose=0)
99
+ print('Test loss :', score[0])
100
+ print('Test accuracy :', score[1])
101
+
102
+ # モデルをプロット
103
+ plot_model(model, to_file='./model3.png')
104
+
105
+ #loss: 訓練データの損失値
106
+ #val_loss: テストデータの損失値
107
+ loss = history.history['loss']
108
+ val_loss = history.history['val_loss']
109
+
110
+ # lossのグラフ
111
+ plt.plot(range(epoch_size), loss, marker='.', label='loss')
112
+ plt.plot(range(epoch_size), val_loss, marker='.', label='val_loss')
113
+ plt.legend(loc='best', fontsize=10)
114
+ plt.grid()
115
+ plt.xlabel('epoch')
116
+ plt.ylabel('loss')
117
+ plt.show()
118
+
119
+ #acc: 訓練データの精度
120
+ #val_acc: テストデータの精度
121
+ acc = history.history['acc']
122
+ val_acc = history.history['val_acc']
123
+
124
+ # accuracyのグラフ
125
+ plt.plot(range(epoch_size), acc, marker='.', label='acc')
126
+ plt.plot(range(epoch_size), val_acc, marker='.', label='val_acc')
127
+ plt.legend(loc='best', fontsize=10)
128
+ plt.grid()
129
+ plt.xlabel('epoch')
130
+ plt.ylabel('acc')
131
+ plt.show()
132
+
133
+
134
+ ### save weights
135
+ json_string = model.to_json()
136
+ open('alexnet_model.json', 'w').write(json_string)
137
+ model.save_weights('alexnet_weights.h5')
138
+
139
+ _____________________________________________________________
140
+
53
141
  ```
54
142
 
55
143
  ### 保存済みの重みデータ