前提・実現したいこと
kerasによって重みを算出し、その値を用いてハードウェア化を目指すことを行っています。
重みの算出を行うことはできたのですが、検算が合わずに困っている状態です。
入力は[1,0,1]を入力し学習させ、[1,0]が入ってきた時に、出力が1となるRNNです。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
model = Sequential() model.add(SimpleRNN(2, activation=actfunc, batch_input_shape=(None, timesteps, 1))) model.add(Dense(1)) 重み U (1, 2) 4.165456593036651611e-01 5.782085061073303223e-01 W (2, 2) 8.230857849121093750e-01 5.847921371459960938e-01 6.210833787918090820e-01 -8.168703913688659668e-01 b (2,) 6.841279566287994385e-02 1.096717920154333115e-02 V (2, 1) 1.339856624603271484e+00 -4.971474707126617432e-01 c (1,) 5.702519416809082031e-02
試したこと
RNNの計算式
ot=tanh(Uxt+Wht-1+b)
から計算しました。
その値が
0.484959 0.0684128
0.5891762 0.0109672
となり、全結合層を通すと、
1.33001979377
となり、答えの1にならないのです。
predictでは0.999997となっています。
自分はRNNの計算部分で間違えていると思うのですが、keras内部でどのような計算をしているのか確認する仕方がわかりません。
検算が合わない理由、もしくは内部でどのような計算をしているか確認する方法を教えてください。
補足情報(FW/ツールのバージョンなど)
まず、
Uxt=
0.416545659303665
0.57820850610733 × 1 0
=
0.416546 0
0.578209 0
Whtは初項なので0ベクトルで無視。
次にバイアスbを足すと
0.484959 0.0684128
0.5891762 0.0109672
となり、活性化関数tanhを通すと、
0.450206147 0.068306268
0.529302863 0.01096676
となる。
次に全結合層を通すと、
1.33001979377
となります。
あなたの回答
tips
プレビュー