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

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

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

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

Python

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

Q&A

0回答

714閲覧

Kerasの自作損失関数でy_trueの要素を取り出したい。

RIO._.

総合スコア0

Keras

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

Python

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

0グッド

0クリップ

投稿2021/09/09 08:01

Kerasの損失関数を自作したいがエラーが生じる。

Kerasを用いて自作の損失関数を用いたいと考えています。

y_predとy_trueをtensor型で取り出し、y_trueが0から1までの連続値を5つ持っているとします。
y_true = [[0, 0.2, 0.5, 0.7, 1], [0.1, 0.6, 0.7, 1, 1], ・・・]のような形です。

ここでy_trueの要素の値が0.5以上の場合のみだけ損失関数の計算の対象として、y_trueが0.5未満の場合は損失関数の計算からは除外するような損失関数を作成したいと考えています。
そのためy_trueの要素1つ1つをif文で0.5以上かどうが判断して計算しようと思ったのですが、y_pred, y_trueの要素を1つずつ取り出すことができません。
(上の例でいくと、0, 0.2, 0.5...という風に1つずつ順に取り出したいです。)

y_true, y_predはともにshapeは(None,5)であり、flattenを用いて1次元に落としこみy_true[i]のような形で参照しようと試みましたが不可でした。Noneなので[i]で参照できないのは想像容易いですが、他に方法が思いつかない状態です。
損失関数であるため、listやnumpyに変更することもできないようです...。

解決法を探しましたがどれもy_true, y_predを要素ごとに参照している例がなく困っています。
解決法のわかる方おられましたらお願いします。

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

TypeError: 'TensorShape' object cannot be interpreted as an integer

該当のソースコード

python

1def loss_function(y_true, y_pred, total=0, num_over_half=0): 2 y_true = torch.flatten(y_true) 3 y_pred = torch.flatten(y_pred) 4 for i in range(y_true.shape): 5 if y_true[i] < 0.5: 6 pass 7 else: 8 error = y_true[i] - y_pred[i] 9 total += error**2 10 num_over_half += 1 11 MSE_custom = total / num_over_half 12 13 return MSE_custom

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

python 3.8.5
tensorflow 2.3.0
keras 2.4.3

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問