日々の記録

日々の記録

PR

×

キーワードサーチ

▼キーワード検索

サイド自由欄

2021.03.31
XML
カテゴリ: linux
ニューラルネットワークのお話。

ネットを検索すると、multi_gpu_modelを使う方法を知る。
だが調べていくうち、multi_gpu_modelは2020年4月以降に廃止とのこと。
どおりで、importに失敗したはずだ。
結局、以下の方法でimportした。
from tensorflow.python.keras.utils.multi_gpu_utils import multi_gpu_model

もう一つ見つけたのが、tensorflow.distribute.MirroredStrategy().scope()を使う方法。
例えば、以下は、Deep Learning with Pythonの5-3節をmulti GPUでやろうとしているもの。

    conv_base = VGG16(weights='imagenet',
                  include_top=False,
                  input_shape=(150, 150, 3))
    conv_base.trainable = False
    model = models.Sequential()
    model.add(conv_base)
    model.add(layers.Flatten())
    model.add(layers.Dense(256, activation='relu'))
    model.add(layers.Dense(1, activation='sigmoid'))

このように tf.distribute.MirroredStrategy().scope():の下で、モデルを構築する。
multi_gpu_modelより、こちらのほうが簡単な気がする。


重要なのが、fit_generator。

history = model.fit_generator(
    train_generator,
    steps_per_epoch=20,
    epochs=30,

    validation_steps=10,
workers=4,
    use_multiprocessing=False)

最後の2行が重要。
どうもこの計算では、ImageDataGeneratorで時間を食っているらしく、この2行がないと以下のようにあまり早くならない。ちなみにバッチサイズは、100に設定してある。

Epoch 1/30
20/20 [==============================] - 10s 389ms/step - loss: 0.6642 - acc: 0.5789 - val_loss: 0.5277 - val_acc: 0.7830
Epoch 2/30
20/20 [==============================] - 7s 372ms/step - loss: 0.5764 - acc: 0.7204 - val_loss: 0.4646 - val_acc: 0.8270
Epoch 3/30
20/20 [==============================] - 7s 375ms/step - loss: 0.5208 - acc: 0.7720 - val_loss: 0.4229 - val_acc: 0.8400

逆に、最後の2行がある場合は、以下の通り。
Epoch 1/30
20/20 [==============================] - 6s 229ms/step - loss: 0.6493 - acc: 0.6282 - val_loss: 0.5412 - val_acc: 0.7550
Epoch 2/30
20/20 [==============================] - 3s 152ms/step - loss: 0.5535 - acc: 0.7364 - val_loss: 0.4686 - val_acc: 0.8160
Epoch 3/30
20/20 [==============================] - 4s 160ms/step - loss: 0.5190 - acc: 0.7587 - val_loss: 0.4252 - val_acc: 0.8380
半分くらいの時間になった。

最後に、multi GPUにしない場合も示しておく。ここでは、バッチサイズは50に設定したため、steps_per_epochは倍の40になっている。
Epoch 1/30
40/40 [==============================] - 8s 193ms/step - loss: 0.7314 - acc: 0.5589 - val_loss: 0.5121 - val_acc: 0.7990
Epoch 2/30
40/40 [==============================] - 8s 190ms/step - loss: 0.5616 - acc: 0.7411 - val_loss: 0.4430 - val_acc: 0.8240
Epoch 3/30
40/40 [==============================] - 8s 191ms/step - loss: 0.4937 - acc: 0.7813 - val_loss: 0.3819 - val_acc: 0.8650






お気に入りの記事を「いいね!」で応援しよう

最終更新日  2021.03.31 18:48:58


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: