LoginSignup
katsuki5080
@katsuki5080

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

python 4次元配列の形状はそれぞれ何を表しているのかわかりません。回答お願いします。

pythonで機械学習を行っているのですが、Githubにあるコードを動かしてみたところ、予測に用いる入力データと予測結果の出力データが4次元配列になってました。
(元のコードに、予測に用いる入力データと予測結果の形状がprintされるよう書き加えました。)

(1800, 3, 300, 1)
(3, 1800, 300, 1)

上が入力データで下が出力データの形状です。
それぞれ何を表しているのでしょうか?いまいち想像できません。
(データセットは独自の物に変えてます。重みつき隣接行列と10000タイムステップ×300ノードの行列を扱ってます)

また、このときの誤差を求めるのですが、1800と3が逆転している理由もわかりません。

誤差関数の例としては以下になります。

def MAE(v, v_):
    """
    Mean absolute error.
    :param v: np.ndarray or int, ground truth.
    :param v_: np.ndarray or int, prediction.
    :return: int, MAE averages on all elements of input.
    """
    return np.mean(np.abs(v_ - v))

なぜ形状が違うのにこれで誤差が求められるのでしょうか?

回答いただけると幸いです。

PS.これは本来回帰問題なのですが、予測結果を整数で丸めて3ラベルの分類問題のように扱おうとしています。このとき誤差ではなく正答率を求めたいのですが、4次元配列ではどのようにすればいいでしょうか?

参考コード https://github.com/VeritasYin/STGCN_IJCAI-18 

0

1Answer

そもそも、
(1800, 3, 300, 1)
は四次元配列ではありませんよ。
これは、一次元配列に四つの値がある状態です。

四次元配列は、下のサンプルみたいに、もっと複雑なものです。
((2,3),((1,2),(3,4)),(12,(2,3),34)))

0

Comments

  1. @katsuki5080

    Questioner
    説明不足でした。(1800, 3, 300, 1)は配列そのものではなく.shapeを用いて出力した配列の形状になります。
    例えば三次元配列の形状は(高さ、幅、チャネル)になると思います。
    これが4次元配列になるといまいちイメージできないため質問しました。

    (1800, 3, 300, 1)がそれぞれ何を表しているのか?また4次元配列二つを比較し、正答率を求めるにはどうしたらいいか?それが分かりません。
  2. @katsuki5080

    Questioner
    配列そのものはおっしゃる通り、とても複雑なものとなっています。
  3. そうでしたか。すみません。

Your answer might help someone💌