エクスポートしたrecurrent_inputが、NNablaで「has no attribute 」になります。

641 views
Skip to first unread message

BOKU

unread,
Oct 14, 2017, 10:29:59 AM10/14/17
to Neural Network Console Users (JP)
こんにちは。
2点あります。
1.elman_net.sdcprjをエクスポートして、NNablaで使おうとすると、recurrent_inputとrecurrent_outputが、「has no attribute 」エラーになりました。
  NNablaのAPIリファレンスで検索してみましたが、どちらもヒットしませんでした。
  これは、現時点では未サポートと理解しておりますが、一応、ご報告させていただきます。
  
  -- エクスポートされたソースは以下です--
  def network(x, x, test=False):
      # Input -> 25,1
      # RecurrentInput -> 1
      h = F.recurrent_input(x, 1, 'RecurrentInput')
      # Affine -> 25,1
      with parameter_scope('Affine'):
          h1 = PF.affine(h4, (25,1))
      # Delay
      h2 = F.delay(h3, (25,), 'RecurrentInput')
      # Affine_2 -> 25
      with parameter_scope('Affine_2'):
          h3 = PF.affine(h, (25,))
      # Concatenate -> 26
      h = F.concatenate(h, h2)
      #Tanh
      h3 = F.tanh(h3)
      # RecurrentOutput -> 25,25
      h4 = F.recurrent_output(h3, 2, 'RecurrentInput', 25)
      # SquaredError
      h5 = F.squared_error(h1, x)
      # Tanh_2
      h1 = F.tanh(h1)
     return 

2.要望です。
  ニューラルネットワークコンソールはCNNの見通しの良さと比較して、RNNになると複雑に感じることが増えます。
  例えば、SimpleRNNやlstmRNN、gruRNNのように過去の隠れ層が隠蔽された高次のレイヤーが追加されるとうれしいです。
  

小林由幸

unread,
Oct 18, 2017, 3:34:03 AM10/18/17
to Neural Network Console Users (JP)

ご指摘の通り、RNNについてそのままでのコード出力は現時点では未サポートとなっています。
しかしながら、通常RNNを用いる場合、Inference時には1時刻分のみ処理するニューラルネットワークを用いることが多いため、学習したニューラルネットワークを元に1時刻分のみ処理するニューラルネットワークに書き換えてExportするということを行います。

具体的には、以下の図のようにネットワークを編集してExportします。



x側の入力にはxの1時刻分のデータのみを入力し(elman_netのサンプルではMNISTの1ライン分の画像)、c側の入力には最初の時刻では0で埋められた1行28列のデータを、次の時刻からは前の時刻のTanhの出力を入力するようにします。
この処理を28時刻分順に繰り返した後、Sigmoidの出力として得られたものが認識結果、ということになります。

2のご要望については、現在Components内のUnitとしてLSTMユニットを用意しています。
こちらは、LSTMのサンプルプロジェクトにあるLSTMユニットを1つにまとめたものになります。
LSTMユニットをお使いいただくことで全体の見通しは良くなる一方、上記のような柔軟な編集ができなくなるというデメリットがあります。
これらは用途に応じて使い分けていただければと思います。
Message has been deleted

BOKU

unread,
Oct 18, 2017, 11:17:27 AM10/18/17
to Neural Network Console Users (JP)
#学習したニューラルネットワークを元に1時刻分のみ処理するニューラルネットワークに書き換えてExportするということを行います。
理解できました。
試してみます。

#現在Components内のUnitとしてLSTMユニットを用意しています。 
回答いただいて探して見つけました。
レイヤーリファレンスでヒットしなかったので、無いと思い込んでいたみたいです。
大変失礼しました。

実は、最初LSTMユニットを次のバージョンの予定と勘違いして投稿し、気づいてから慌てて消しました。
そのため、変なメールが行っているかもしれませんが、ご容赦ください。

こちらも試してみます。

ありがとうございました。
Reply all
Reply to author
Forward
0 new messages