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

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

新規登録して質問してみよう
ただいま回答率
86.12%
Python 3.x

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

解決済

pythonのclassを使ったコードと等価な展開コードを作る

sigefuji
sigefuji

総合スコア114

Python 3.x

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

1回答

0リアクション

1クリップ

247閲覧

投稿2022/09/19 07:24

前提

参考書籍から抜粋編集したコードです。
これをよく理解するために、汎用性を考えずに、classを使わずに展開する等価なコードはどのようになりますか。
この展開形でも同じ動作をすること。
ここではclassを使う方が理解しやすいとの意見は無しとさせていただきます。
等価な展開形ができなければ理解したことにならないので。

該当のソースコード

python

hidden_dim=100 output_dim=10 class MLP(tf.keras.Model): def __init__(self, hidden_dim, output_dim): super().__init__() self.fc1 = tf.keras.layers.Dense(hidden_dim, activation='relu') self.dropout = tf.keras.layers.Dropout(0.50) self.fc2 = tf.keras.layers.Dense(output_dim, activation='softmax') def call(self, x): # MLPのインスタンスからコールバックされる関数 x = self.fc1(x) x = self.dropout(x) x = self.fc2(x) return x #呼び出し条件1の設定 model = MLP(arg1,arg2)   # 呼び出しno.1 #呼び出し条件2の設定 model = MLP(arg1,arg2)   # 呼び出しno.2

試したこと

考えた展開形ですが、まったく自信がありません。

python

hidden_dim=100 output_dim=10 def call(self, x): # MLPのインスタンスからコールバックされる関数 x = self.fc1(x) x = self.dropout(x) x = self.fc2(x) return x # super().__init__(hidden_dim, output_dim) fc1 = tf.keras.layers.Dense(hidden_dim, activation='relu') dropout = tf.keras.layers.Dropout(0.50) fc2 = tf.keras.layers.Dense(output_dim, activation='softmax') # 呼び出しno.1 x = fc1(x) x = dropout(x) x = fc2(x) # 呼び出しno.2 x = fc1(x) x = dropout(x) x = fc2(x)

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/09/19 08:44

こちらの質問が複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

2022/09/19 07:28

こちらの質問が他のユーザーから「問題・課題が含まれていない質問」という指摘を受けました。

jbpb0

2022/09/19 09:45

https://note.nkmk.me/python-tensorflow-keras-basics/ も参考になると思います 同じモデルを、下記の三通りの方法で書いてます ・Sequential API:シンボリック(宣言型)API ・Functional API:シンボリック(宣言型)API ・Subclassing API (Model Subclassing):命令型(モデル サブクラス化)API
meg_

2022/09/19 10:18

参考書籍が何か分かりませんが、「等価な展開形ができなければ理解したことにならない」がスクラッチから実装することを意味するのであれば、ゼロから作るシリーズの書籍が参考になると思います。
sigefuji

2022/09/19 12:09

別な表現にしてみます。 MLPが呼ばれると以下のような処理の流れになる。 このような理解をしましたが、正しいでしょうか、それともどこか間違っていますか。 どれも全く間違っていると残念です。 1.MLPが呼ばれる 2.initが実行される 3.tf.keras.layers.Denseを呼ぶ(modelの定義段階) 4.tf.keras.layers.Dropoutを呼ぶ(modelの定義段階) 5.tf.keras.layers.Denseを呼ぶ(modelの定義段階)   (どこかでMLPのインスタンスができる)   インスタンスからcallがcallbackされ、次が実行される。 6.fc1 7.dropout 8.fc2 9.callの戻り値としてmodelのオブジェクトxが返る
sigefuji

2022/09/19 12:21

jbpb0さん 3通りの方法のうち最初の2通りについては、ある程度その役割効果はおおよそ(中身でなく)知っています。 参考委書籍は件の本で、5章5節です。エッセンスだけ拾っています。 この質問はこれら3通りのうち、シーケンシャルモデルで、表現形式がことなるだけであろうと理解しています。ですので、何らかのシーケンシャルな記述ができるのではないかと考えたのが質問の趣旨です。 >等価な展開形ができなければ理解したことにならない」がスクラッチから実装すること の意味がわかりません。 なお理解と言う言葉にはそれほどの強い意味はありません。語彙力に乏しく適当な日本語が思いつきませんでした。 これらのことまで推し量って質問文に含めるのは難しいです。
sigefuji

2022/09/19 12:26

もしかすると、define and run と define by runとの違いがあると質問が成り立たないだろうとは思いますが。また自動微分の方式違いがあるとこれまただめですね。いずれも、今回のkerasでは同一と思っているのですが・・・。
jbpb0

2022/09/19 22:36

質問者さん >>等価な展開形ができなければ理解したことにならない」がスクラッチから実装すること > の意味がわかりません。 は、誰に向けたものですか?
sigefuji

2022/09/20 01:13

meg_さん 参考書籍は”物体画像認識時系列データ処理入門”の5章5節です。 質問で提示したコードの範囲で良いかと思いましたが、やはり他の部分もないとつじつまが合わないようでした。 >等価な展開形ができなければ理解したことにならない」がスクラッチから実装すること の意味がわかりません。 ゼロからシリーズの1巻と3巻を見ていますが、そのどのような種類の項目が参考になりますか。
sigefuji

2022/09/20 01:33

jbpb0さん >等価な展開形ができなけ の件。宛先を間違えました。失礼しました。 3通りの方法の内、3番目が質問のスタイルなのですね。今朝落ち着いて読んでみました。 NNの構築実装方法の違いはわかりました。その功罪、制限事項も色々記述されていましたが、理解できたのは一部です。しかし、かなり理解が進みました。

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

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