の解説です。ここまででcnnのブロックを全て使えるようになりました。実際にそれらを組み合わせてCNNを設計しましょう。というtutorialです。ではどのような層の深さで?どのくらいの規模の?フィルターの数と大きさは?等についての指針はありません。ならばどうするかというと一般的に使われているCNNを持ってきてそれらを元に自分の用途に合うように調整を加えることになります。
model.summary()
この関数は定義したモデルの概要を眺めることができます。
実際にそのごtutorialでオリジナルCNNを作成してますが、さほど精度も出ていません。また、知識としては大規模CNNは学習に時間がかかりますが、ここで作ったCNN程度であったり、一般に使われているCNNを調整するのはそこまで学習に時間がかかりません。実際にkernelを動かしてみてその規模と時間を測ると体感できるかと思います。
def convert_to_float(image, label):
image = tf.image.convert_image_dtype(image, dtype=tf.float32)
return image, label
AUTOTUNE = tf.data.experimental.AUTOTUNE
ds_train = (
ds_train_
.map(convert_to_float)
.cache()
.prefetch(buffer_size=AUTOTUNE)
)
ds_valid = (
ds_valid_
.map(convert_to_float)
.cache()
.prefetch(buffer_size=AUTOTUNE)
)
の部分については
tf.image.convert_image_dtype: 画像データimageのデータ型をtf.float32に変換。さらに適切な範囲にスケーリングする
AUTOTUNE = tf.data.experimental.AUTOTUNE: データセットのパフォーマンスを自動的にチューニングするために、実行時に利用可能なCPUコア数などに基づいて、最適なバッファサイズや並列処理の数をTensorFlowが自動的に決定。
.cache(): データセットの要素をメモリにキャッシュしようとする。
.prefetch(buffer_size=AUTOTUNE): データのプリフェッチを有効化する。モデルがデータを処理している間に、バックグラウンドで次のバッチのデータを準備しようとしている。
ds_valid : 検証データセットの前処理
となっています。