tensorflowシンプルCNN使用
1962 ワード
tensorflowでkerasを用いてボリュームニューラルネットワークを構築する
1.モデルモデルモデルを初期化します.Sequentialクラスを作成し、レイヤを追加
2.コンパイルモデル呼び出しcompile()、最適化方法の指定、損失関数など
3.Callbackの定義(オプション)トレーニング終了条件の定義
4.ピクチャジェネレータはピクチャジェネレータを作成し、フォルダからピクチャを読み出し、ピクチャを処理する
5トレーニングコールモデルのfit_generatorトレーニングデータ
初期化
コンパイル
ピクチャジェネレータ
コールバック
トレーニング
1.モデルモデルモデルを初期化します.Sequentialクラスを作成し、レイヤを追加
2.コンパイルモデル呼び出しcompile()、最適化方法の指定、損失関数など
3.Callbackの定義(オプション)トレーニング終了条件の定義
4.ピクチャジェネレータはピクチャジェネレータを作成し、フォルダからピクチャを読み出し、ピクチャを処理する
5トレーニングコールモデルのfit_generatorトレーニングデータ
初期化
import tensorflow as tf
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(16,(3,3),activation = tf.nn.relu,input_shape = (300,300,3)),
tf.keras.layers.MaxPool2D(2,2),
tf.keras.layers.Conv2D(32,(3,3),activation=tf.nn.relu),
tf.keras.layers.MaxPool2D(2,2),
tf.keras.layers.Conv2D(64,(3,3),activation=tf.nn.relu),
tf.keras.layers.MaxPool2D(2,2),
tf.keras.layers.Conv2D(64,(3,3),activation=tf.nn.relu),
tf.keras.layers.MaxPool2D(2,2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512,activation=tf.nn.relu),
tf.keras.layers.Dense(1,activation= tf.nn.sigmoid)
])
コンパイル
from tensorflow.keras.optimizers import RMSprop
model.compile(optimizer = RMSprop(lr=0.0003),loss = "binary_crossentropy",metrics = ["acc"])
ピクチャジェネレータ
from tensorflow.keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale=1/255.0)
train_generator = train_datagen.flow_from_directory(
"/tmp/h-or-s",
target_size = (300,300),
batch_size = 10,
class_mode = "binary",
)
コールバック
class myCallback(tf.keras.callbacks.Callback):
def on_epoch_end(self, epochs,logs={}):
if logs.get("acc") > 0.999:
print("
Reached 99.9% accuracy so cancelling training!")
self.model.stop_training = True
callbacks = myCallback()
トレーニング
hist = model.fit_generator(
train_generator,
steps_per_epoch=8,
epochs=10,
verbose=1,
callbacks=[callbacks])