kerasでCNNを構築しました。
画像の読み取りにはimagedatageneratorを使用しています。
かさ増しするためzoom_range等を使用しました。
かさ増しする画像枚数を指定したいのですがソースコードがよくわかりません。
回答お願いしましす
import
1from keras.models import Sequential, Model 2from keras.layers import Conv2D, MaxPooling2D 3from keras.layers import Activation, Dropout, Flatten, Dense 4from keras.optimizers import Adam 5from keras.preprocessing.image import ImageDataGenerator 6import matplotlib.pyplot as plt 7from PIL import Image 8import numpy as np 9 10batch_size = 5 11epochs = 25 12 13#モデル構築 14def Mymodel(): 15 model = Sequential() 16 #畳み込み層1 17 model.add(Conv2D(32, (3, 3), input_shape=(50, 50, 3))) 18 model.add(Activation('relu')) 19 #プーリング層1 20 model.add(MaxPooling2D(pool_size=(2, 2))) 21 22 #畳み込み層2 23 model.add(Conv2D(64, (3, 3))) 24 model.add(Activation('relu')) 25 #プーリング層2 26 model.add(MaxPooling2D(pool_size=(2, 2))) 27 28 #畳み込み層3 29 model.add(Conv2D(96, (3, 3))) 30 model.add(Activation('relu')) 31 #プーリング層3 32 model.add(MaxPooling2D(pool_size=(2, 2))) 33 34 #畳み込み層4 35 model.add(Conv2D(128, (3, 3))) 36 model.add(Activation('relu')) 37 #プーリング層4 38 model.add(MaxPooling2D(pool_size=(2, 2))) 39 40 #1次配列に変更 41 model.add(Flatten()) 42 model.add(Dense(96)) 43 model.add(Activation('relu')) 44 model.add(Dropout(0.5)) 45 model.add(Dense(5)) 46 model.add(Activation('softmax')) 47 48 model.summary() 49 50 return model 51 52 53model = Mymodel() 54 55for layer in model.layers: 56 layer.trainable = True 57 58model.compile(loss='categorical_crossentropy', 59 optimizer='Adam', 60 metrics=['accuracy']) 61 62train_datagen = ImageDataGenerator( 63 rescale=1.0 / 255, 64 shear_range=0.2, 65 zoom_range=0.2, 66 horizontal_flip=True) 67 68 69test_datagen = ImageDataGenerator(rescale=1.0 / 255) 70 71train_generator = train_datagen.flow_from_directory( 72 'ダウンロード/train1', 73 target_size=(50, 50), 74 batch_size=batch_size, 75 class_mode='categorical') 76 77validation_generator = test_datagen.flow_from_directory( 78 'ダウンロード/test1', 79 target_size=(50, 50), 80 batch_size=batch_size, 81 class_mode='categorical') 82 83print(train_generator.class_indices) 84 85hist = model.fit_generator( 86 train_generator, 87 steps_per_epoch=20, 88 nb_epoch=epochs, 89 validation_data=validation_generator, 90 validation_steps=75) 91 92model.save('Mymodel.h5') 93 94score = model.evaluate_generator(validation_generator, val_samples=75, verbose=1) 95print('test loss', score[0]) 96print('test acc', score[1]) 97 98model = Mymodel() 99 100 101model.load_weights('Mymodel.h5') 102 103 104filepath = 'ダウンロード/load1-1.jpeg' 105plt.show(filepath) 106img = Image.open(filepath).convert('RGB') 107img = img.resize((50, 50)) 108x = np.array(img, dtype=np.float32) 109x = x / 255. 110x = x[None, ...] 111 112pred = model.predict(x, batch_size=1, verbose=1) 113score = np.max(pred) 114pred_label = np.argmax(pred) 115print(pred_label) 116print(score) 117 118loss = hist.history['loss'] 119val_loss = hist.history['val_loss'] 120acc = hist.history['acc'] 121val_acc = hist.history['val_acc'] 122epochs = len(loss) 123plt.plot(range(epochs), loss, marker='.', label='loss()') 124plt.plot(range(epochs), val_loss, marker='.', label='val_loss()') 125plt.legend(loc='best') 126plt.grid() 127plt.xlabel('epochs') 128plt.ylabel('loss') 129plt.show() 130 131plt.plot(range(epochs), acc, marker='.', label='acc()') 132plt.plot(range(epochs), val_acc, marker='.', label='val_acc()') 133plt.legend(loc='best') 134plt.grid() 135plt.xlabel('epochs') 136plt.ylabel('acc') 137plt.show() 138
回答1件
あなたの回答
tips
プレビュー