はじめに
GMOコネクトの永田です。
前回の記事でDCGAN(Deep Convolutional Generative Adversarial Networks)を試しているとき、学習に利用するデータ量がどの程度結果に影響するんだろう?と、ふと疑問に思ったので試してみました。
まとめ
- データ量は、生成される画像の質やlossの収束に強く影響する
- MNIST(28x28x1)のデータの場合、40,000件ぐらいは必要そうで、それを下回ると結果が劣化する
測定用の改造
前回と同じくTensorflowのチュートリアルを使います。
チュートリアルではデータセットがMNISTの60,000件ですので、微修正します。
def main():
"""Main function to run the DCGAN training."""
print("TensorFlow version:", tf.__version__)
# Load and prepare the dataset
(train_images, train_labels), (_, _) = tf.keras.datasets.mnist.load_data()
train_images = train_images.reshape(train_images.shape[0], 28, 28, 1).astype('float32')
train_images = (train_images - 127.5) / 127.5 # Normalize the images to [-1, 1]
BUFFER_SIZE = 60000
BATCH_SIZE = 256
# Batch and shuffle the data
train_dataset = tf.data.Dataset.from_tensor_slices(train_images).shuffle(BUFFER_SIZE).batch(BATCH_SIZE)
# pickup 10000 datas for debug <--ここを追加、10,000〜60,000まで手動で変更しながら測定
train_dataset = train_dataset.take(10000 * BATCH_SIZE // BUFFER_SIZE)
# Create the models
(以下略)
実測データ
比較結果をみてもらう方が、直感的にわかりやすいです。
datasets | generated iamge | loss |
---|---|---|
10,000 | ![]() |
![]() |
20,000 | ![]() |
![]() |
30,000 | ![]() |
![]() |
40,000 | ![]() |
![]() |
50,000 | ![]() |
![]() |
60,000 | ![]() |
![]() |
MNIST 30,000データぐらいから生成画像が安定し始めて、40,000データぐらいだと60,000(MNIST最大データ数)と比べても見劣りしない気がします。
20,000データだと生成画像もEpoch進んでも、ブレブレですね。
データ数が学習時間に直結する(正比例する)のでローカルでdebugするときはなるべくデータ数を抑えたいところですが、40,000ぐらいがバランスが良さそうでしょうか。
なお、Epoch毎のPNGをEpoch数をいれながらアニメーションGIFには、Copilot Agent Claude Sonnet4が以下のような雑なpromptでも一発でやってくれました😊
tesorflow_tutorials_dcgan のimage_at_epochのPNGを、1つのアニメーション画像にしたい。また、Epoch数もそのアニメーション内に表示したい。
(再掲)まとめ
- データ量は、生成される画像の質やlossの収束に強く影響する
- MNIST(28x28x1)のデータの場合、40,000件ぐらいは必要そうで、それを下回ると結果が劣化する
弊社では、機械学習・AI・LLMなどを使ったサービスの開発や技術支援をはじめ、幅広い支援を行っておりますので、何かありましたらお気軽にお問合せください。