2

私はこの機能を持っています:

import numpy as np 
def unhot(vec):
    """ takes a one-hot vector and returns the corresponding integer """
    assert np.sum(vec) == 1    # this assertion shouldn't fail, but it did...
    return list(vec).index(1)

への呼び出しの出力で呼び出します。

numpy.random.multinomial(1, coe)

実行すると、ある時点でアサーションエラーが発生しました。これはどのように可能ですか?numpy.random.multinomial の出力はワンホット ベクトルであることが保証されていませんか?

次に、アサーション エラーを削除したところ、次のようになりました。

ValueError: 1 is not in list

欠けている細字がありますか、それとも単に壊れているだけですか?

4

1 に答える 1

1

さて、これが問題です。以前に遭遇したことがあるので、気付くべきでした。

np.random.multinomial(1,A([  0.,   0.,  np.nan,   0.]))

戻り値

array([0,                    0, -9223372036854775807,0])

Nansを提供する不安定なsoftmax実装を使用していました。ここで、多項式に渡したパラメーターの合計が 1 以下であることを確認しようとしていましたが、次のようにしました。

coe = softmax(coeffs)
while np.sum(coe) > 1-1e-9:
    coe /= (1+1e-5)

そこに NaN があると、while ステートメントがトリガーされることさえないと思います。

于 2014-04-24T16:46:01.240 に答える