このカスタムレイヤーをKerasで構築するにはどうすればよいですか?

アレックスデフト

複素数をサポートするNNを構築しています。現在、複雑なアクティベーションに取り組んでいます。Benjioの論文によると、これは良いものです。

ここに画像の説明を入力してください

ここで、bは学習するトレーニング可能なパラメーターです。そのため、このアクティベーションを行うための特別なレイヤーを構築しています。私はKerasを初めて使用し、すでに立ち往生しています。以下でこのコードを作成しましたが、ビルド関数でエラーが発生します。何が起こっているのかわかりません。テンプレートをコピーしようとしました。助けてください。

class modrelu(Layer):
    def __init__(self, **kwargs):
        super(modrelu, self).__init__(**kwargs)

    def build(self):
        self.b= K.variable(value=np.random.rand()-0.5, dtype='float64')
        super(modrelu, self).build()  # Be sure to call this at the end

    def call(self, x):
        assert isinstance(x, list)
        ip_r, ip_i = x
        comp= tf.complex(ip_r, ip_i ) 
        ABS= tf.math.abs(comp)
        ANG= tf.math.angle(comp)

        ABS= K.relu( self.b + ABS) 

        op_r=  ABS * K.sin(angle) #K.dot ??
        op_i= ABS * K.cos(angle)
        return [op_r, op_i]

    def compute_output_shape(self, input_shape):
        assert isinstance(input_shape, list)
        shape_a, shape_b = input_shape
        return [shape_a, shape_b]

私のコードへのコメント:初期化では何も追加しませんでした。インスタンス化されたときに入力を受け取らないアクティベーションレイヤーであるためです。

buildメソッドで、bを追加しようとしました。self.add_weightメソッドを使用する必要があるかどうかわかりません。理想的には、入力の次元と同じ数のbが必要です。

この呼び出しメソッドでは、私が何をしているのかかなり確信しています。簡単です。関数を実装しただけです。

最後のcompute_output_shapeは、テンプレートをコピーして貼り付けました。出力は入力と同じである必要があります。これは単なるアクティベーションレイヤーであるためです。

最後に、その価値の誤り、私はそれがナンセンスであることを知っています

TypeError                                 Traceback (most recent call last)
<ipython-input-5-3101a9226da5> in <module>
      1 a=K.variable(np.array([1,2]))
      2 b=K.variable(np.array([3,4]))
----> 3 act([a,b])

~\AppData\Local\conda\conda\envs\python36\lib\site-packages\keras\engine\base_layer.py in __call__(self, inputs, **kwargs)
    429                                          'You can build it manually via: '
    430                                          '`layer.build(batch_input_shape)`')
--> 431                 self.build(unpack_singleton(input_shapes))
    432                 self.built = True
    433 

TypeError: build() takes 1 positional argument but 2 were given
NShiny

コードにはいくつかの問題があります。

まず、インタプリタから発生するエラーに対処する必要があります。

TypeError: build() takes 1 positional argument but 2 were given

buildこの方法は、取るべきinput_shape引数を。したがって、ビルドメソッドを次のように宣言する必要がありますbuild(self, input_shape)

2番目の問題は、buildメソッド内の変数の未定義の形状です変数の形状を明示的に宣言する必要があります。あなたの場合、np.random.rand配列はinput_shape形でなければなりません

もう1つの問題は[op_r, op_i]callメソッド2つの結果(を返そうとしていることです私はKerasの専門家ではありませんが、私が知る限り、あなたはそれを行うことができません。すべてのKerasレイヤーには1つだけの出力が必要です。詳細については、こちらをご覧ください:https//github.com/keras-team/keras/issues/3061

ただし、tensorflowバックエンドを使用する場合は、複素数(tf.complex)を使用して、複素数の実数(op_r)とイメージ(op_i)の両方の部分を返すことができます

これは、modrelu簡単な使用例を使用したレイヤーの実際の実装ですこれは、KerasAPIの独自の実装とともに配布されるTensorFlow1.12.0用に書かれていますが、元のKerasに簡単に採用できると思います。

import tensorflow as tf
from tensorflow.python.keras import backend as K
from tensorflow.python.keras.engine import Layer
import numpy as np


class modrelu(Layer):

    def __init__(self, **kwargs):
        super(modrelu, self).__init__(**kwargs)

    # provide input_shape argument in the build method
    def build(self, input_shape):
        # You should pass shape for your variable
        self.b= K.variable(value=np.random.rand(*input_shape)-0.5,
                           dtype='float32')
        super(modrelu, self).build(input_shape)  # Be sure to call this at the end

    def call(self, inputs, **kwargs):
        assert inputs.dtype == tf.complex64

        ip_r = tf.math.real(inputs)
        ip_i = tf.math.imag(inputs)

        comp = tf.complex(ip_r, ip_i )
        ABS = tf.math.abs(comp)
        ANG = tf.math.angle(comp)

        ABS = K.relu(self.b + ABS)

        op_r = ABS * K.sin(ANG) #K.dot ??
        op_i = ABS * K.cos(ANG)

        # return single tensor in the call method
        return tf.complex(op_r, op_i)


real = tf.constant([2.25, 3.25])
imag = tf.constant([4.75, 5.75])

x = tf.complex(real, imag)

y = modrelu()(x)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())

    print(sess.run(y))

PS:私は数学をチェックしなかったので、あなたは自分でそれをチェックするべきです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Tensorflow 2.x Kerasカスタムレイヤーで複数の入力を使用するにはどうすればよいですか?

分類Dev

Kerasで動的形状のカスタム出力レイヤーを実装するにはどうすればよいですか?

分類Dev

kerasカスタム正則化で初期化されたレイヤーウェイトを使用するにはどうすればよいですか?

分類Dev

LLVMのカスタムフォークを使用するようにRustコンパイラを構築するにはどうすればよいですか?

分類Dev

Kerasでレイヤーのタイプを取得するにはどうすればよいですか?

分類Dev

既存のレイヤーファイルに対してDojoレイヤーを構築するにはどうすればよいですか?

分類Dev

ocamlbuildを使用してカスタムutopベースのトップレベルを構築するにはどうすればよいですか?

分類Dev

この場合、Firebaseデータベースを構築するにはどうすればよいですか?

分類Dev

Spacemacsの指定されたレイヤーにカスタムキーバインディングを追加するにはどうすればよいですか?

分類Dev

機能的なAPIを使用してKerasでカスタムレイヤーを呼び出すにはどうすればよいですか?

分類Dev

カスタム画像回帰問題のKerasモデルを構築するにはどうすればよいですか?

分類Dev

曲のインデックスをカスタムミュージックプレーヤーに送信するにはどうすればよいですか?

分類Dev

Rでデータフレームを再構築するにはどうすればよいですか?

分類Dev

このデータフレームをスライスするにはどうすればよいですか?

分類Dev

カスタムCUDAインストールに対してOpenCLでGDALを構築するにはどうすればよいですか?

分類Dev

Kerasでレイヤーのウェイトを取得するにはどうすればよいですか?

分類Dev

JOOQカスタムジェネレーターを構築するにはどうすればよいですか?

分類Dev

Pythonでタイムスタンプの発生に基づいてシーケンスを構築するにはどうすればよいですか?

分類Dev

ワードプレスのカスタムテーマに基づいて構築されたウェブサイトのレスポンシブデザインを作成するにはどうすればよいですか?

分類Dev

scapyでカスタムトップレベルレイヤー2ヘッダーを作成するにはどうすればよいですか?

分類Dev

プレーヤーのスプライトと同じフレームをカメラで更新するにはどうすればよいですか?

分類Dev

サイズ128x128x3の画像の入力レイヤーでカーネル初期化用のソーベルフィルターを構築するにはどうすればよいですか?

分類Dev

ケラスにカスタム画像シャープニングレイヤーを追加するにはどうすればよいですか?

分類Dev

カスタムTensorflowレイヤーで混合精度をサポートするにはどうすればよいですか?

分類Dev

.NET 4.5このカスタムクレームタイプを作成するにはどうすればよいですか?

分類Dev

カスタムクラスをAWSLambdaレイヤーに追加するにはどうすればよいですか?

分類Dev

UIViewでカスタムCALayerをバッキングレイヤーとして使用するにはどうすればよいですか?

分類Dev

このカスタムタイプを削除するにはどうすればよいですか?

分類Dev

構造を壊さずにKerasモデルのレイヤーの名前を変更するにはどうすればよいですか?

Related 関連記事

  1. 1

    Tensorflow 2.x Kerasカスタムレイヤーで複数の入力を使用するにはどうすればよいですか?

  2. 2

    Kerasで動的形状のカスタム出力レイヤーを実装するにはどうすればよいですか?

  3. 3

    kerasカスタム正則化で初期化されたレイヤーウェイトを使用するにはどうすればよいですか?

  4. 4

    LLVMのカスタムフォークを使用するようにRustコンパイラを構築するにはどうすればよいですか?

  5. 5

    Kerasでレイヤーのタイプを取得するにはどうすればよいですか?

  6. 6

    既存のレイヤーファイルに対してDojoレイヤーを構築するにはどうすればよいですか?

  7. 7

    ocamlbuildを使用してカスタムutopベースのトップレベルを構築するにはどうすればよいですか?

  8. 8

    この場合、Firebaseデータベースを構築するにはどうすればよいですか?

  9. 9

    Spacemacsの指定されたレイヤーにカスタムキーバインディングを追加するにはどうすればよいですか?

  10. 10

    機能的なAPIを使用してKerasでカスタムレイヤーを呼び出すにはどうすればよいですか?

  11. 11

    カスタム画像回帰問題のKerasモデルを構築するにはどうすればよいですか?

  12. 12

    曲のインデックスをカスタムミュージックプレーヤーに送信するにはどうすればよいですか?

  13. 13

    Rでデータフレームを再構築するにはどうすればよいですか?

  14. 14

    このデータフレームをスライスするにはどうすればよいですか?

  15. 15

    カスタムCUDAインストールに対してOpenCLでGDALを構築するにはどうすればよいですか?

  16. 16

    Kerasでレイヤーのウェイトを取得するにはどうすればよいですか?

  17. 17

    JOOQカスタムジェネレーターを構築するにはどうすればよいですか?

  18. 18

    Pythonでタイムスタンプの発生に基づいてシーケンスを構築するにはどうすればよいですか?

  19. 19

    ワードプレスのカスタムテーマに基づいて構築されたウェブサイトのレスポンシブデザインを作成するにはどうすればよいですか?

  20. 20

    scapyでカスタムトップレベルレイヤー2ヘッダーを作成するにはどうすればよいですか?

  21. 21

    プレーヤーのスプライトと同じフレームをカメラで更新するにはどうすればよいですか?

  22. 22

    サイズ128x128x3の画像の入力レイヤーでカーネル初期化用のソーベルフィルターを構築するにはどうすればよいですか?

  23. 23

    ケラスにカスタム画像シャープニングレイヤーを追加するにはどうすればよいですか?

  24. 24

    カスタムTensorflowレイヤーで混合精度をサポートするにはどうすればよいですか?

  25. 25

    .NET 4.5このカスタムクレームタイプを作成するにはどうすればよいですか?

  26. 26

    カスタムクラスをAWSLambdaレイヤーに追加するにはどうすればよいですか?

  27. 27

    UIViewでカスタムCALayerをバッキングレイヤーとして使用するにはどうすればよいですか?

  28. 28

    このカスタムタイプを削除するにはどうすればよいですか?

  29. 29

    構造を壊さずにKerasモデルのレイヤーの名前を変更するにはどうすればよいですか?

ホットタグ

アーカイブ