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

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

ただいまの
回答率

88.58%

Chainerで学習済みモデルの読み込み時にUnpicklingErrorが出て読み込めません

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 1,089

nuii_

score 15

 前提・実現したいこと

現在、ChainerでSeq2Seqを用いた対話生成を実装しています。
学習を行ったノート上では生成を行えるのですが、別ノートでモデルを読み込むとエラーが出て
自分では解決法が分からなかったため、どなたか助けていただけると幸いです。

 発生している問題・エラーメッセージ

TypeError                                 Traceback (most recent call last)
<ipython-input-37-60cceaa37c68> in <module>()
      5     print(query, "=>", response)
      6 
----> 7 predict(model, "初めまして。")
      8 predict(model, "どこから来たんですか?")
      9 

<ipython-input-37-60cceaa37c68> in predict(model, query)
      1 def predict(model, query):
      2     enc_query = data_converter.sentence2ids(query, train=False)
----> 3     dec_response = model(enc_words=enc_query, train=False)
      4     response = data_converter.ids2words(dec_response)
      5     print(query, "=>", response)

<ipython-input-34-bad8b6d5ee08> in __call__(self, enc_words, dec_words, train)
    194         self.reset() # model内に保存されている勾配をリセット
    195         enc_words = [chainer.Variable(xp.array(row, dtype='int32')) for row in enc_words] # 発話リスト内の単語をVariable型に変更
--> 196         self.encode(enc_words, batch_size) # エンコードの計算
    197         t = chainer.Variable(xp.array([0 for _ in range(batch_size)], dtype='int32')) # <eos>をデコーダーに読み込ませる
    198         loss = chainer.Variable(xp.zeros((), dtype='float32')) # 損失の初期化

<ipython-input-34-bad8b6d5ee08> in encode(self, words, batch_size)
    144         # 順向きのEncoderの計算
    145         for w in words:
--> 146             c, h = self.f_encoder(w, c, h)
    147             self.fs.append(h) # 計算された中間ベクトルを記録
    148         # 内部メモリ、中間ベクトルの初期化

<ipython-input-34-bad8b6d5ee08> in __call__(self, x, c, h)
     25             次の内部メモリ、次の隠れ層
     26         """
---> 27         e = F.tanh(self.xe(x))
     28         return F.lstm(c, self.eh(e) + self.hh(h))
     29 

/usr/local/lib/python3.6/dist-packages/chainer/link.py in __call__(self, *args, **kwargs)
    240         if forward is None:
    241             forward = self.forward
--> 242         out = forward(*args, **kwargs)
    243 
    244         # Call forward_postprocess hook

/usr/local/lib/python3.6/dist-packages/chainer/links/connection/embed_id.py in forward(self, x)
     68 
     69         """
---> 70         return embed_id.embed_id(x, self.W, ignore_label=self.ignore_label)

/usr/local/lib/python3.6/dist-packages/chainer/functions/connection/embed_id.py in embed_id(x, W, ignore_label)
    164 
    165     """
--> 166     return EmbedIDFunction(ignore_label=ignore_label).apply((x, W))[0]

/usr/local/lib/python3.6/dist-packages/chainer/function_node.py in apply(self, inputs)
    235                 'Actual: {}'.format(
    236                     self.label,
--> 237                     ', '.join(str(type(x)) for x in in_data)))
    238 
    239         is_debug = chainer.is_debug()

TypeError: incompatible array types are mixed in the forward input (EmbedIDFunction).
Actual: <class 'cupy.core.core.ndarray'>, <class 'numpy.ndarray'>

 元ソースコード

全文は字数制限のため載せられませんでした。
Gin04様のAttention Seq2Seqで対話モデルを実装してみたを参考にし、テキストファイルを3次元配列として読み込み学習を行っています。

 補足情報

実装はGoogle ColaboratoryでGPUを使用し行っています。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

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

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

関連した質問

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