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

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

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

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

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

Q&A

1回答

2001閲覧

scikit-learnのCountvectorizerについて

howareyou1245

総合スコア20

Chainer

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

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

0グッド

0クリップ

投稿2019/10/27 00:37

やりたいこと

現在、18万文程度のデータを使って、ニューラルネットワークによる機械学習を行っています。
素性には、Bag-of-Wordsを使っています。
また、文章ごとに対象の単語が一つ定めてあります。
データの分かち書きはしてあり、scikit-learnのCountvectorizerを使ってBoWを構築しています。

toarray()関数を使うことでnumpy配列を得ることができると思います。
自分の場合データ数が多すぎるため(5万次元×18万文)
Memory Errorを引き起こしてしまいます。

なので以下のソースコードのように、対象単語のインデックスを 変数tmpに入れ、その部分だけを配列に変換しています。

python

1vectorizer = CountVectorizer() 2vectorizer.fit(lines) 3bag = vectorizer.transform(lines) 4features = vectorizer.get_feature_names() 5 6vec = [None] * len(tmp) 7for i,num in enumerate(tmp): 8 vec[i] = bag[num].torray()

これで得た 変数vec をChainerに入れて学習を行っています。

今回やりたいことは、上記ソースコードにおいて、bagの部分を直接Chainerに入れることができるのか知りたいということです。
つまりいちいちtoarray()する必要なく文章ごとの素性を取り出せるかどうかです。

試したこと

なにも考えずに試しに bag の部分をChainerに入れたところ下記エラーが発生しました。

python

1--------------------------------------------------------------------------- 2IndexError Traceback (most recent call last) 3<ipython-input-5-9302b54f7efd> in <module>() 4 73 #trainer.extend(extensions.ProgressBar()) 5 74 6---> 75 trainer.run() 7 76 net.to_cpu() 8 77 chainer.serializers.save_npz("sono-model.npz", net) 9 1010 frames 11/usr/local/lib/python3.6/dist-packages/scipy/sparse/_index.py in _asindices(self, idx, length) 12 162 13 163 if x.ndim not in (1, 2): 14--> 164 raise IndexError('Index dimension must be <= 2') 15 165 16 166 if x.size == 0: 17 18IndexError: Index dimension must be <= 2

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

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

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

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

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

guest

回答1

0

chainerの入力はnumpyかcupyである必要があるので、それらの形式にコンバートしないと入力できません。

投稿2019/10/27 05:40

fukatani

総合スコア626

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問