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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

Python mask に関して複数の条件を指定する方法 - ReLU関数のカスタム法について

Sakana_pro
Sakana_pro

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0評価

0クリップ

344閲覧

投稿2022/07/05 04:52

編集2022/07/05 18:39

機械学習の勉強をするためPython でプログラミングしております。

活性化関数のRelu型関数に関して、条件を変えて色々試したくてプログラムを試みているのですがうまくいきません。

やりたいことは
1 ある以上の値になった場合に0を返す

2ある以上の値になった場合は関数の上限を固定する

3ある以上の値になった場合、値を変更する=例えばランダム性を生じる

などです。某有名書のコードをそのまま使っておりまして,Reluの順向きな発火に関しては、 Self.mask を組み込んでおります。

**
https://github.com/oreilly-japan/deep-learning-from-scratch
こちらの ch05 の二層の実行プログラム
https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/ch05/two_layer_net.py
の背景にあるコードを編集してみようと思っています。
https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/common/layers.py

こちらのClass Relu, が該当コードとなります。
**

Python

def forward(self, x): self.mask = (x <= 0) out = x.copy() out[self.mask] = 0

このようなコードで通常のReluの振る舞いを定義しております。

ここで0以下に加えて、500以上の値を取った時に0の値を出力したいのですが、

Python

def forward(self, x): self.mask = (x <= 0) & (x > 500) out = x.copy() out[self.mask] = 0

もしくは

Python

def forward(self, x): self.mask = (x <= 0) | (x > 500) out = x.copy() out[self.mask] = 0

で目的の指定ができるかと思っているのですが、これで良いのでしょうか。試していて動かしても正しく動いているように思えません。
正しく設定する方法をご教示いただけましたら大変ありがたいです。

また2はRelu6

ReLU6(x)=min(max(0,x),6)

などがその例かと思うのですが、こちらを上記のfoward の関数の中にどのように取り込めばよいかもアドバイスいただけますと幸いです。

3に関しては具体的なアイデアはまだないのですが、例えばある一定上の値になった場合にはある一定までからゼロのランダムをとる、 というものが記述できないかと思っております。

ぜひお力を頂きたく思います。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

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

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

can110

2022/07/05 05:15

コードは断片ではなく他の人が検証、実行可能な状態でコードプロックで囲んで提示ください(例えばxの型が不明です) また、とくに問題なければ参考図書、サイト名は明示ください。 そのうえで、実際に単純データ例で試してみれば正しいかは判断できると思うのですが、いかがでしょうか。
Sakana_pro

2022/07/05 05:33

ご確認ありがとうございました。こちらゼロから作るディープラーニングのMNIST画像認識に関するコードとなります。 https://github.com/oreilly-japan/deep-learning-from-scratch こちらの ch05 の二層の実行プログラム https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/ch05/two_layer_net.py の背景にあるコードを編集してみようと思っています。 https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/common/layers.py こちらのClass Relu, が該当コードとなります。 def forward(self, x): self.mask = (x <= 0) out = x.copy() out[self.mask] = 0 xはnumpy array として格納された各要素です。 よろしくお願いいたします。
can110

2022/07/05 05:59

ここは依頼のための欄であり、目につきにくくもあるので質問本文を修正ください。
quickquip

2022/07/05 06:18

コード部分はコードの入力機能を使って普通に読めるようにしましょう。 https://teratail.com/help/question-tips#questionTips35 これで良いのでしょうか。 と質問していますが思った通りに動かなくて聞いているのか、思った通りに動いたけど聞いているのか不明なせいで、何を聞きたいのかふんわりしているという印象でした。何が問題になっているのか分かりません。 (内容的に私が回答することはないと思いますが気になったので。1と3は逆伝搬どうするつもりなんだろうみたいな疑問はありますが……)
Sakana_pro

2022/07/05 07:08

修正対応いたしました。ご指摘ありがとうございました。
Sakana_pro

2022/07/05 07:16

1に関しましては Backward を def backward(self, dout): dout[self.mask] = 0 dx = dout return dx のように処置してますので、mask で条件付けして、0以下と500以上は微分ゼロ、その他は1で良いのかと思っておりました。 確かに3は微分が不明な感じがします。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。