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

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

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

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

1回答

1365閲覧

Pythonでの最近傍法の実装をしましたが,実行時間の短縮方法を教えて欲しいです.

退会済みユーザー

退会済みユーザー

総合スコア0

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2020/01/15 10:20

編集2020/01/15 10:51

前提・実現したいこと

Pythonで機械学習を行う前の段階で,最近傍法を用いてクラスタリングをしてみました.しかし,このプログラムでは実行に時間がかかりすぎ使い物になりませんでした.実行時間を短縮するためにどこをどのように修正すれば良いか教えて欲しいです.

該当のソースコード

Python

1import numpy as np 2import cv2 3NL = 700 4t=0 5imgshape = (120, 100, 3) 6D = np.prod(imgshape) 7datL = np.empty((NL, D)) 8labL = np.empty(NL, dtype=int) 9K = 3 10with open ('listL.txt') as f: #学習データの読み込み 11 for line in f: 12 line = line.strip() 13 i, s = line.split() 14 img= cv2.imread(i) 15 vec = img.reshape(-1) 16 datL[t,:]=vec 17 labL[t]=s 18 t=t+1 19 20d=np.empty((NL,)) 21count=0 22cnt=0 23with open ('listT.txt') as x: #テストデータの読み込み 24 for line in x: 25 count=count+1 26 line = line.strip() 27 i, s = line.split() 28 img= cv2.imread(i) 29 vec = img.reshape(-1) 30 vec2= vec**2 31 for n in range(NL): #テストデータと学習データの距離計算(ユークリッド距離) 32 d[n]=np.sum((vec-datL[n,:])**2) 33 no=d.argmin() 34 if int(s)==labL[no]: 35 cnt=cnt+1 36 37print(cnt) #正解の数表示 38print(cnt/count) #識別率の表示 39 40

試したこと

距離計算のところ d[n]=np.sum((vec-datL[n,:])**2)を変えようとしましたが,うまくいきません.

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

画像の読み込みのは時間がかかっていません.これは最短距離法を同じデータで実装した場合,約1〜2秒でできましたが,最近傍法は約30秒かかってしまします.そこで,距離計算に目をつけたのですが改善方法が見つからず苦戦しています.よろしくお願いします.

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

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

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

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

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

guest

回答1

0

距離計算のところで時間がかかっていることを、時間を計測するなどして確認したのでしょうか?

上記のスクリプトの実行が完了するのに時間がかかるということを言っているのであれば、実行するたびに画像を全部読みこむ必要があるので、そこに時間がかかっていると思います。
画像の読み込みに時間がかかるのは、仕方ないと思います。一度読み込んで、メモリに展開してしまえば、スクリプトを終了するまではデータはメモリ上にあるので、推論に必要な処理は距離の計算だけになります。

投稿2020/01/15 10:27

tiitoi

総合スコア21956

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

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

退会済みユーザー

退会済みユーザー

2020/01/15 10:53 編集

ご指摘ありがとうございます.最近傍法では約30秒かかります.このプログラムで使用するデータを最短距離法で使用したところ実行時間が約2秒程度でした.そのため,距離計算の改善が必要なのではと考えました.
tiitoi

2020/01/17 02:17 編集

画像サイズと最近傍法で登録したサンプル数がどのくらいなのかにもよりますが、それぞれそれなりに大きい場合は時間がかかりそうですね。 画像のすべての画素をそのまま特徴量として使用するとどうしても計算量がかなり多くなってしまうので、画像から特徴を抽出して次元数を削減するといいかもしれません。 特徴に何を使うかという問題がありますが、色の構成が似た画像を見つけたいのであれば、色のヒストグラムを特徴量にする、色以外にエッジとか総合的に特徴を見たい場合はCNNで特徴抽出するのがいいかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問