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

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

ただいまの
回答率

87.49%

keras 自作損失関数にエラーがでます。

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 526

score 12

kerasで損失関数を自作したいのですが、ミニバッチの扱い方がよくわかりません。
自作したコードがこちらです。

def custom_loss(y, L):
    #y.shape = (batch_size, 50)
    #L.shape = (batch_size, 50, 50)
    return K.mean(K.dot(K.dot(K.transpose(y), L), y), axis=-1)


意図としては、転置したベクトルと行列を内積して得られたベクトルをさらにベクトルと内積して
それのミニバッチ全体の平均を損失関数としています。

これでfitしようとすると次のエラーが出ました。

Epoch 1/50

InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-283-f2523448ebc4> in <module>
2                      batch_size=100,
3                      nb_epoch=epochs,
----> 4                      shuffle=True,
5                      #validation_data=(mean_test, Sigma_test),
6                      #callbacks=[es]

~/anaconda3/lib/python3.7/site-packages/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, **kwargs)
1037                                         initial_epoch=initial_epoch,
1038                                         steps_per_epoch=steps_per_epoch,
-> 1039                                         validation_steps=validation_steps)
1040 
1041     def evaluate(self, x=None, y=None,

~/anaconda3/lib/python3.7/site-packages/keras/engine/training_arrays.py in fit_loop(model, f, ins, out_labels, batch_size, epochs, verbose, callbacks, val_f, val_ins, shuffle, callback_metrics, initial_epoch, steps_per_epoch, validation_steps)
197                     ins_batch[i] = ins_batch[i].toarray()
198 
--> 199                 outs = f(ins_batch)
200                 outs = to_list(outs)
201                 for l, o in zip(out_labels, outs):

~/anaconda3/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py in call(self, inputs)
2713                 return self._legacy_call(inputs)
2714 
-> 2715             return self._call(inputs)
2716         else:
2717             if py_any(is_tensor(x) for x in inputs):

~/anaconda3/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py in _call(self, inputs)
2673             fetched = self._callable_fn(*array_vals, run_metadata=self.run_metadata)
2674         else:
-> 2675             fetched = self._callable_fn(*array_vals)
2676         return fetched[:len(self.outputs)]
2677 

~/anaconda3/lib/python3.7/site-packages/tensorflow/python/client/session.py in call(self, *args, **kwargs)
1456         ret = tf_session.TF_SessionRunCallable(self._session._session,
1457                                                self._handle, args,
-> 1458                                                run_metadata_ptr)
1459         if run_metadata:
1460           proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

InvalidArgumentError: transpose expects a vector of size 2. But input(1) is a vector of size 3
[[{{node loss_27/lambda_19_loss/transpose_2}}]]

どのようにすればデータ1つの場合の損失関数の値を計算して、そのミニバッチでの平均値を出力することができるのでしょうか。拙い文章で申し訳ありませんが、どうぞ宜しくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

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

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

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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