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

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

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

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

2042閲覧

畳み込みオートエンコーダのdecoderモデル構築・保存方法と'list' object is not callableエラー解決方法

39_panda

総合スコア1

Keras

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/11/26 10:19

編集2020/11/26 11:19

前提・実現したいこと

現在pythonでkerasを用いた畳み込みオートエンコーダの学習モデル作成に取り組んでいます.
その際に圧縮したデータを抽出するためのencoderモデルと全体のautoencoderモデルはそれぞれ作成・保存できたのですが,圧縮データを復元するためのdecoderモデルの作成で下記のエラーメッセージが表示されてしまいます.

layerの扱い等々まだまだ勉強途中でして,ネットで調べてみても解決方法を見つけられませんでした.
エラーの解決方法,decoderモデルの作成方法等,ご教授のほどよろしくお願い致します.

発生している問題・エラーメッセージ

Traceback (most recent call last): File "XXXXXX.py", line YYY, in <module> decoder = Model(input=encoded_input, output=decoder_layer(encoded_input)) TypeError: 'list' object is not callable

該当のソースコード(抜粋)

Python

1# レイヤー定義 2 input_img = Input(shape=(20, 20, 1)) 3 x = Convolution2D(32, 3, 3, activation=Act[i], border_mode='same')(input_img) 4 x = Convolution2D(16, 3, 3, activation=Act[i], border_mode='same')(x) 5 x = MaxPooling2D((2, 2), border_mode='same')(x) 6 x = Convolution2D(16, 3, 3, activation=Act[i], border_mode='same')(x) 7 x = Convolution2D(4, 3, 3, activation=Act[i], border_mode='same')(x) 8 9 x = Convolution2D(1, 3, 3, activation=Act[i], border_mode='same')(x) 10 encoded = MaxPooling2D((2, 2), border_mode='same')(x) 11 12 x = Convolution2D(4, 3, 3, activation=Act[i], border_mode='same')(encoded) 13 x = Convolution2D(16, 3, 3, activation=Act[i], border_mode='same')(x) 14 x = UpSampling2D((2, 2))(x) 15 x = Convolution2D(16, 3, 3, activation=Act[i], border_mode='same')(x) 16 x = Convolution2D(32, 3, 3, activation=Act[i], border_mode='same')(x) 17 x = UpSampling2D((2, 2))(x) 18 decoded = Convolution2D(1, 3, 3, activation='sigmoid', border_mode='same')(x) 19# モデル作成 20 autoencoder = Model(input_img, decoded) 21 encoder = Model(input_img, encoded) 22# デコーダ部分のモデル作成 23 encoded_input = Input(shape=(5, 5, 1)) 24 decoder_layer = autoencoder.layers[-7:] 25 decoder = Model(input=encoded_input, output=decoder_layer(encoded_input))

試したこと

decoder_layer = autoencoder.layers[-7:]

のスライス部分をいろいろ変えてみた.

decoder_layer = autoencoder.layers[-1]

のようにしてみると通ったが,decoderに用いたいのは[-7:]の範囲.

追記

閲覧,コメント等いただいた皆様

少し冗長ではありますが,以下のような手段でデコーダ部分のレイヤーを取得すると,エラーなく実行できました.
復元結果はまだ数値をざっと見比べる程度でしか確認していませんが,おそらくデコーダとして正しく機能できていると思われます.

encoded_input = Input(shape=(5, 5, 1)) decoder_layer1 = autoencoder.layers[-7] decoder_layer2 = autoencoder.layers[-6] decoder_layer3 = autoencoder.layers[-5] decoder_layer4 = autoencoder.layers[-4] decoder_layer5 = autoencoder.layers[-3] decoder_layer6 = autoencoder.layers[-2] decoder_layer7 = autoencoder.layers[-1] decoder_layer =decoder_layer7(decoder_layer6(decoder_layer5(decoder_layer4(decoder_layer3(decoder_layer2(decoder_layer1(encoded_input))))))) decoder = Model(input=encoded_input, output=decoder_layer)

もっとスマートな方法をご存知の方いらっしゃいましたら是非アドバイスいただければ幸いです.

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

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

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

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

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

meg_

2020/11/26 11:03

> Traceback (most recent call last): > File "XXXXXX.py", line YYY, in <module> > decoder = Model(input=encoded_input, output=decoder_layer(encoded_input)) > TypeError: 'list' object is not callable エラーメッセージは上記で全てですか?
39_panda

2020/11/26 11:12

コメントありがとうございます. そちらのエラーメッセージのみとなっておりました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問