Help us understand the problem. What is going on with this article?

Tensorflowのkeras.layers.Layerの変数宣言について

More than 1 year has passed since last update.

注意

以下に書くことはTensorflowの仕様の体系的な理解に基づいているわけではなく、現段階の不完全なメモです。後日気が向いたら加筆修正するかもしれません。

はじめに

tf.keras.layers.Layerを継承することで独自のlayerクラスを定義できます。この時変数を__init__内で定義するか、build内で定義するかで挙動が変わります。(原則として変数はbuild内で定義することになっている)

一方Tensorflowにはtf.layers.Layerと言うクラスも存在します。こちらは公式リファレンスに

It is considered legacy, and we recommend the use of tf.keras.layers.Layer instead.

とあることから、新たな使用は避けた方が良いようです。このクラスも__init__buildcallにより設定されるなどインターフェースは似ていますが、その挙動はkeras.layers.Layerとはやや異なっており互換性はありません。

メモ

  • そもそもLayerクラスとは

    • レイヤーと変数の所有関係を明確にする
    • レイヤーをオブジェクトとして扱う(オブジェクト指向)
    • 変数の再利用が容易(name scopeを記述しなくていい)
  • __init__buildcallの役割

    • __init__:レイヤーの設定(出力次元数など)の保存
    • build:変数の宣言。初めてグラフに組み込まれる際に一度だけ実行される。
    • call:グラフの構築。グラフに組み込まれるたびに実行される。
  • tf.keras.layers.Layertf.layers.Layer

    • tf.keras.layers.Layer
      • Layer.weightsに変数を格納していく
      • 当該レイヤーを内包するtf.keras.models.ModelModel.weightsにも当該レイヤーの変数が格納される
      • 変数の名前はlayer_name/variable_nameになる(スコープの制御は自動で行われる)
      • 別のレイヤーを内包することはできない
    • tf.layers.Layer
      • layer1/layer2/layer3/layer3_variable0のような名前付けを自動で(ユーザーがtf.variable_scopeを意識することなく)行う
      • 別のレイヤーを内包できる
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした