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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Chainer

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1609閲覧

chainercv, faster R-CNNでクラス数を変更し,再度学習したい

yan_tomo

総合スコア5

Chainer

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/04/14 22:22

編集2020/04/14 23:56

前提・実現したいこと

タイトル,質問の内容ともに説明が不十分だったので修正しました.

一度学習した物体検出モデルのクラス数変更のため,学習済みモデルを元に再度学習を行いたい.
pretrained_modelに'imagenet'を設定した場合には最終層の重みはコピーされないのに対し,
セーブしたnpzファイルをロードするとすべての重みをコピーしようとするため,エラーが生じるのだと思います.
コピーできる重みだけをコピーするにはどうすればよいでしょうか.

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

Traceback (most recent call last): File "<input>", line 1, in <module> File "C:\Users\UserName\AppData\Local\Continuum\anaconda3\envs\chainer\lib\site-packages\chainercv\links\model\faster_rcnn\faster_rcnn_vgg.py", line 141, in __init__ chainer.serializers.load_npz(path, self) File "C:\Users\UserName\AppData\Local\Continuum\anaconda3\envs\chainer\lib\site-packages\chainer\serializers\npz.py", line 243, in load_npz d.load(obj) File "C:\Users\UserName\AppData\Local\Continuum\anaconda3\envs\chainer\lib\site-packages\chainer\serializer.py", line 83, in load obj.serialize(self) File "C:\Users\UserName\AppData\Local\Continuum\anaconda3\envs\chainer\lib\site-packages\chainer\link.py", line 1026, in serialize d[name].serialize(serializer[name]) File "C:\Users\UserName\AppData\Local\Continuum\anaconda3\envs\chainer\lib\site-packages\chainer\link.py", line 1026, in serialize d[name].serialize(serializer[name]) File "C:\Users\UserName\AppData\Local\Continuum\anaconda3\envs\chainer\lib\site-packages\chainer\link.py", line 657, in serialize data = serializer(name, param.data) # type: types.NdArray File "C:\Users\UserName\AppData\Local\Continuum\anaconda3\envs\chainer\lib\site-packages\chainer\serializers\npz.py", line 185, in __call__ numpy.copyto(value, dataset) File "<__array_function__ internals>", line 6, in copyto ValueError: could not broadcast input array from shape (101) into shape (102)

該当のソースコード

python

1import chainer 2import chainercv 3 4model = chainercv.links.FasterRCNNVGG16(n_fg_class=100) 5train_chain = chainercv.links.model.faster_rcnn.FasterRCNNTrainChain(model) 6 7'''' 8trainの処理をしたとする 9''' 10 11chainer.serializers.save_npz('tmp.npz', train_chain.faster_rcnn) 12 13# 検出したい物体が増えたので,上記のモデルを元に再度学習したい 14model = chainercv.links.FasterRCNNVGG16(n_fg_class=101, pretrained_model='tmp.npz') 15train_chain = chainercv.links.model.faster_rcnn.FasterRCNNTrainChain(model) 16 17'''' 18再度trainする 19''' 20 21

補足情報(FW/ツールのバージョンなど)

chainer.version
'7.2.0'
chainercv.version
'0.13.1'

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

以下のサイトを参考にして,所望の重みのみ学習済みモデルから引き継ぐことが出来そうです.
リンク内容
お騒がせしました.

投稿2020/04/15 00:55

yan_tomo

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

以下のサイトを参考にして,所望の重みのみ学習済みモデルから引き継ぐことが出来そうです.
リンク内容
お騒がせしました.

投稿2020/04/15 00:54

yan_tomo

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

100クラスで作ったのですから、100クラスにしてください。
あるいは、質問の内容が説明不足と思われます。特に「繰り返し」の意図を説明してください。

投稿2020/04/14 23:12

Q71

総合スコア995

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yan_tomo

2020/04/14 23:37

説明不足申し訳ありません. 繰り返し,という意図は, 例えば100クラスでモデルを作った後,検出したい物体が一種類増えた時に, 100クラスで作ったモデルを元に101クラスの物体検出モデルを学習させたいというものです.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問