回答編集履歴

6 サイトを追記

pashango2

pashango2 score 896

2017/07/18 18:32  投稿

`pickle`のデータを作成(dump)した時点と、ロード(load)した時点で`LSTM`の`__init__`の引数の数が変わっていませんか?
(LSTMのクラス定義を変更しませんでしたか?)
[http://qiita.com/s-wakaba/items/f15b4aa579c018880758](http://qiita.com/s-wakaba/items/f15b4aa579c018880758)
上記の記事にあるように、ユーザー定義のクラスをunpickle化(load)する際に、ユーザー定義のクラスを復元しようとします。
pickle化した時点とクラス構造が異なっていると、上手くunpickleする事ができません。
---
補足
少し調べてみたのですが、`pickle`を使ってシリアライズする方法がよく載っていますが、これはあまり良い方法ではない気がします。
上の記事でも分かるように、unpickleはものすごい複雑な処理をしますし、何よりバージョン間の互換性はありません。
`serializers`メソッドを使うほうが良いのではないかと思います。
[http://hellkite.hatenablog.com/entry/chainer_model_save](http://hellkite.hatenablog.com/entry/chainer_model_save)  
[http://studylog.hateblo.jp/entry/2016/01/05/212830](http://studylog.hateblo.jp/entry/2016/01/05/212830)
5 補足

pashango2

pashango2 score 896

2017/07/18 18:29  投稿

`pickle`のデータを作成(dump)した時点と、ロード(load)した時点で`LSTM`の`__init__`の引数の数が変わっていませんか?
(LSTMのクラス定義を変更しませんでしたか?)
[http://qiita.com/s-wakaba/items/f15b4aa579c018880758](http://qiita.com/s-wakaba/items/f15b4aa579c018880758)
上記の記事にあるように、ユーザー定義のクラスをunpickle化(load)する際に、ユーザー定義のクラスを復元しようとします。
pickle化した時点とクラス構造が異なっていると、上手くunpickleする事ができません。
pickle化した時点とクラス構造が異なっていると、上手くunpickleする事ができません。
---
補足
少し調べてみたのですが、`pickle`を使ってシリアライズする方法がよく載っていますが、これはあまり良い方法ではない気がします。
上の記事でも分かるように、unpickleはものすごい複雑な処理をしますし、何よりバージョン間の互換性はありません。
`serializers`メソッドを使うほうが良いのではないかと思います。
[http://studylog.hateblo.jp/entry/2016/01/05/212830](http://studylog.hateblo.jp/entry/2016/01/05/212830)
4 補足

pashango2

pashango2 score 896

2017/07/18 18:24  投稿

`pickle`のデータを作成(dump)した時点と、ロード(load)した時点で`LSTM`の`__init__`の引数の数が変わっていませんか?
(LSTMのクラス定義を変更しませんでしたか?)  
[http://qiita.com/s-wakaba/items/f15b4aa579c018880758](http://qiita.com/s-wakaba/items/f15b4aa579c018880758)
上記の記事にあるように、ユーザー定義のクラスをunpickle化(load)する際に、ユーザー定義のクラスを復元しようとします。
pickle化した時点とクラス構造が異なっていると、上手くunpickleする事ができません。
3 追記

pashango2

pashango2 score 896

2017/07/18 18:20  投稿

`pickle`のデータを作成(dump)した時点と、ロード(load)した時点で`LSTM`の`__init__`の引数の数が変わっていませんか?
`pickle`のデータを作成(dump)した時点と、ロード(load)した時点で`LSTM`の`__init__`の引数の数が変わっていませんか?
[http://qiita.com/s-wakaba/items/f15b4aa579c018880758](http://qiita.com/s-wakaba/items/f15b4aa579c018880758)
上記の記事にあるように、ユーザー定義のクラスをunpickle化(load)する際に、ユーザー定義のクラスを復元しようとします。
pickle化した時点とクラス構造が異なっていると、上手くunpickleする事ができません。
2 修正しました、すみませんでした。

pashango2

pashango2 score 896

2017/07/18 18:17  投稿

すみません、コードを読み間違えました。
少し時間をください。
`pickle`のデータを作成(dump)した時点と、ロード(load)した時点で`LSTM`の`__init__`の引数の数が変わっていませんか?
1 コードを読み間違えました

pashango2

pashango2 score 896

2017/07/18 18:06  投稿

`pickle.load`関数の第一引数は`read`と`readline`の2つのメソッド(インターフェイス)があるオブジェクトでなくてはいけません。
[https://docs.python.jp/3/library/pickle.html](https://docs.python.jp/3/library/pickle.html)
> 引数 file には 2 つのメソッド、整数引数をとる read() と、引数を要求しない readline() メソッドがなければなりません。両方のメソッドはバイト列を返す必要があります。そのため file には、バイナリ読み込みとしてオープンされたディスク上のファイル、io.BytesIO オブジェクト、あるいはこのインタフェースに適合するその他のカスタムオブジェクトなどを指定できます。
渡された`LSTM`というオブジェクトは、その2つのメソッドが実装されていません。
すみません、コードを読み間違えました。
少し時間をください。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る