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

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

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

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

Python

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

Q&A

解決済

1回答

542閲覧

【python・keras(初心者)】Sparse autoencoderがエポックを回す毎に遅くなってしまう

chain

総合スコア11

Keras

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

Python

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

0グッド

0クリップ

投稿2019/08/13 07:39

pythonのkerasでSparse autoencoderの学習を行っているのですが、エポックを回すごとに徐々にですが確実に遅くなっていきます。
ざっくりとですが、表示される速さも6us/step程度だったものが、1時間後には10us/step程度になり、24時間後には40us/step程度になります。多くのエポックを回すことができず困っています。
エポックごとにまったく異なる学習を開始しており、前のエポックから次のエポックに影響はないはずなので毎回同じ速度で計算できるはずだと思うのですが。原因や対処方法を教えていただきたいです。

環境はWindows10のWSLで、CPU使用率は30%程度、メモリは十分空きありです。
試しにmnistのデータを使ってほぼ同じ条件で実行しても同じように遅くなりました。そのコードは以下です。

python

1from keras.layers import Input, Dense 2from keras.models import Model,Sequential 3from keras.datasets import mnist 4from keras import regularizers 5import numpy as np 6 7(x_train, _), (x_test, _) = mnist.load_data() 8x_train = x_train.astype('float32') / 255. 9x_test = x_test.astype('float32') / 255. 10x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:]))) 11x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:]))) 12 13#同じ条件になるようにデータを切り取り 14X_train=x_train[0:96000,0:25] 15X_test=x_test[96000:96256,0:25] 16 17encoding_dim = 3 18input_img = Input(shape=(25,)) 19 20for i in range(1000): 21 autoencoder=Sequential() 22 encoded = Dense(encoding_dim, activation='relu', 23 activity_regularizer=regularizers.l1(1e-4))(input_img) 24 decoded = Dense(25, activation='sigmoid')(encoded) 25 autoencoder = Model(input=input_img, output=decoded) 26 27 autoencoder.compile(optimizer='adam', loss='binary_crossentropy') 28 autoencoder.fit(X_train, X_train, 29 nb_epoch=30, 30 batch_size=256, 31 shuffle=True, 32 validation_data=(X_test, X_test)) 33

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

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

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

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

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

mokemokechicken

2019/08/13 07:45

これは、全く同じ学習を1000回やっているのは、速度が遅くなる原因を探る検証コードだから、ですかね?
guest

回答1

0

ベストアンサー

このコードをみると、

1つのモデルの学習を30epochでやっていて、その処理を1000回やっているわけですが、
その度に新しいModelが生成されています。
※ つまり最終的には1000個のModelが生成されている。ただし参照できるのは最後の1つだけ。

Model生成のときに各WeightがTensorFlowのSessionに確保されていくと思いますが、
それが蓄積されていくに連れ、Session上のOPの数も増え微妙に遅くなっていく、ということなのではないでしょうか。

投稿2019/08/13 08:10

mokemokechicken

総合スコア948

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

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

chain

2019/08/13 08:19

ありがとうございます。では、30回終わるごとにModelを消したい場合はどうすればよいのでしょうか。 試しに del autoencoder を入れてみても徐々に遅くなっていっているように思います。
mokemokechicken

2019/08/13 08:28

https://keras.io/ja/backend/ keras.backend.clear_session() みたいなのを入れると、BackendのSessionもクリアされると思います。 ただ、現状では input_img = Input(shape=(25,)) がループの外になるので、これを内側にいれないと2ループ目辺りにエラーになるかもしれないです。
chain

2019/08/13 08:30

なるほど。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問