質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2857閲覧

Keras CNNでImageDataGenerator使用 かさ増し枚数を指定する

zoosan

総合スコア15

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2019/02/05 16:07

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiitoi

2019/02/05 16:13

「かさ増しする画像枚数」とは何を指して言っているのでしょうか?1つ前の質問欄のコメント欄に書いたように ImageDataGenerator は、「元が100枚だったら300枚に増やす」といったようなものではありません。 ImageDataGenerator はミニバッチを作成したあと、パラメータに従い、ランダムに適当な変換を行い、ネットワークに流すものです。
zoosan

2019/02/05 16:23

何度も回答ありがとうございます。 理解を間違えてたみたいです。
guest

回答1

0

ベストアンサー

イメージ説明

ImageDataGenerator はリアルタイムに変換を行い、オーグメンテーションする機能なので、元の画像を3倍に増やすといったものではありません。
そのかわり、n 倍水増ししたい場合は steps_per_epoch (1エポックあたりの反復回数) を n 倍すれば同等の効果が得られます。

投稿2019/02/05 16:19

編集2019/02/05 16:20
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問