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

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

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

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

Python 3.x

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

Q&A

解決済

1回答

1124閲覧

InstanceNormalization層を実行しようとするとエラーが出る

kazukiyamaura

総合スコア19

Keras

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

Python 3.x

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

0グッド

0クリップ

投稿2019/06/10 04:17

前提・実現したいこと

KerasでInstanceNorm層とConvolution層を用いたEncoderを実装したいと思っています

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

エラーメッセージ --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-3-6a921f9b3839> in <module> 27 )(x) 28 ---> 29 model = build_encoder() <ipython-input-3-6a921f9b3839> in build_encoder(input_shape) 18 activation='relu' 19 )(Input_layer) ---> 20 x = InstanceNormalization()(x) 21 x = Conv2D( 22 128, ~/.pyenv/versions/anaconda3-4.4.0/envs/ml/lib/python3.6/site-packages/keras/engine/base_layer.py in __call__(self, inputs, **kwargs) 441 442 # Handle mask propagation. --> 443 previous_mask = _collect_previous_mask(inputs) 444 user_kwargs = copy.copy(kwargs) 445 if not is_all_none(previous_mask): ~/.pyenv/versions/anaconda3-4.4.0/envs/ml/lib/python3.6/site-packages/keras/engine/base_layer.py in _collect_previous_mask(input_tensors) 1309 inbound_layer, node_index, tensor_index = x._keras_history 1310 node = inbound_layer._inbound_nodes[node_index] -> 1311 mask = node.output_masks[tensor_index] 1312 masks.append(mask) 1313 else: AttributeError: 'Node' object has no attribute 'output_masks'

該当のソースコード

Python

1import numpy as np 2from tensorflow.python import keras 3from tensorflow.python.keras import backend as K 4from tensorflow.python.keras.models import Sequential, Model 5from tensorflow.python.keras.layers import Conv2D, Activation, Input 6from keras_contrib.layers.normalization.instancenormalization import InstanceNormalization 7 8def build_encoder(input_shape=(256,256,3)): 9 Input_layer = Input( 10 shape=input_shape, 11 name='input' 12 ) 13 x = Conv2D( 14 64, 15 3, 16 1, 17 padding='same', 18 activation='relu' 19 )(Input_layer) 20 x = InstanceNormalization()(x) 21 x = Conv2D( 22 128, 23 3, 24 2, 25 padding='same', 26 activation='relu' 27 )(x) 28 29model = build_encoder()

試したこと

試しにソースコード20行目のInstanceNormalization()(x)をInstanceNormalization(x)にしてみると、以下のエラーコードが出ました

--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-2-1930bd708f2a> in <module> 27 )(x) 28 ---> 29 model = build_encoder() <ipython-input-2-1930bd708f2a> in build_encoder(input_shape) 25 padding='same', 26 activation='relu' ---> 27 )(x) 28 29 model = build_encoder() ~/.pyenv/versions/anaconda3-4.4.0/envs/ml/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py in __call__(self, inputs, *args, **kwargs) 728 729 # Check input assumptions set before layer building, e.g. input rank. --> 730 self._assert_input_compatibility(inputs) 731 if input_list and self._dtype is None: 732 try: ~/.pyenv/versions/anaconda3-4.4.0/envs/ml/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py in _assert_input_compatibility(self, inputs) 1461 spec.min_ndim is not None or 1462 spec.max_ndim is not None): -> 1463 if x.shape.ndims is None: 1464 raise ValueError('Input ' + str(input_index) + ' of layer ' + 1465 self.name + ' is incompatible with the layer: ' AttributeError: 'InstanceNormalization' object has no attribute 'shape'

またソースコード21-27行目のConv2Dを削除して実行、すなわちInstanceNormalization層以下に何も層を設置しない状態で実行すると、エラーコードは出ませんでした。

補足情報(FW/ツールのバージョンなど)

動作環境は、Jupiter Notebookです

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

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

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

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

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

guest

回答1

0

ベストアンサー

参考記事いわく、以下のようにimport文を書き換えるとうまくいくようです。

import numpy as np import keras from keras import backend as K from keras.models import Sequential, Model from keras.layers import Conv2D, Activation, Input from keras_contrib.layers.normalization.instancenormalization import InstanceNormalization

参考記事:KerasのInstanceNormalizationがエラー


ただし、この書き方にするとConv2Dの部分で以下のようなエラーが発生します。

ValueError Traceback (most recent call last) <ipython-input-15-541578a2748e> in <module>() 26 )(x) 27 ---> 28 model = build_encoder() 2 frames <ipython-input-15-541578a2748e> in build_encoder(input_shape) 23 2, 24 padding='same', ---> 25 activation='relu' 26 )(x) 27 /usr/local/lib/python3.6/dist-packages/keras/legacy/interfaces.py in wrapper(*args, **kwargs) 32 object_name = func.__name__ 33 if preprocessor: ---> 34 args, kwargs, converted = preprocessor(args, kwargs) 35 else: 36 converted = [] /usr/local/lib/python3.6/dist-packages/keras/legacy/interfaces.py in conv2d_args_preprocessor(args, kwargs) 277 if kwd in kwargs: 278 raise ValueError( --> 279 'It seems that you are using the Keras 2 ' 280 'and you are passing both `kernel_size` and `strides` ' 281 'as integer positional arguments. For safety reasons, ' ValueError: It seems that you are using the Keras 2 and you are passing both `kernel_size` and `strides` as integer positional arguments. For safety reasons, this is disallowed. Pass `strides` as a keyword argument instead.

これに関しては、kernel_sizestridesの両方を引数に持ってきているのが原因であり、stridesのみ書けば解消されます。

エラーメッセージでもstridesのみ引数にすることを推奨しているようです。

投稿2019/06/11 01:15

amahara_waya

総合スコア1029

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

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

kazukiyamaura

2019/06/12 07:16

ご回答のとうりに記述したところ無事動作しました、ありがとうございます。 にしても、どうしてこれでうまくいくのか、よくわかりませんね…
amahara_waya

2019/06/12 23:15

tensorflow.python.keras(tensorflow付属のkeras)とkerasでは使っているファイルが違うので、それによる影響かもしれませんね。バージョンが同じでも起こるので、pathの話とか絡んだ難しい話になるかもしれませんが…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問