前提
機械学習をやったことがなく、勉強を兼ねて「ネットから取得した画像を自動分別」するプログラムを書こうとしております。
- python2.7.4
- MacOSX (Yosemite)
- (恐らく)SVM
です。
質問概要
ネットから取得した画像を自動分別するプログラムを機械学習を用いてPython(2.7.4)で行いたいのですが、
方法が分かりません。
詳しい方、ご教示願います。
質問内容
機械学習初心者で、コードを書いたことがありません。
サンプルプログラムを走らせながら勉強しているのですが、どうもサンプル自体がネットにあまりなく、コードを勉強することができず困っています。
そこでたまたま見つけた以下のサイトが、偶然にも私のやりたい「画像分類」だったので、コピペで動かそうとしています。
http://stmind.hatenablog.com/entry/2014/01/15/012418
コピーしたサンプルコードも抜粋。
lang
1#-*- encoding: utf-8 -*- 2 3from PIL import Image 4import numpy as np 5import os 6import pandas as pd 7import pylab as pl 8from sklearn.decomposition import RandomizedPCA 9from sklearn.externals import joblib 10from sklearn.svm import LinearSVC 11 12 13STANDARD_SIZE = (300, 167) 14 15 16def img_to_matrix(filename, verbose=False): 17 img = Image.open(filename) 18 if verbose: 19 print 'changing size from %s to %s' % (str(img.size), str(STANDARD_SIZE)) 20 img = img.resize(STANDARD_SIZE) 21 imgArray = np.asarray(img) 22 return imgArray # imgArray.shape = (167 x 300 x 3) 23 24 25def flatten_image(img): 26 s = img.shape[0] * img.shape[1] * img.shape[2] 27 img_wide = img.reshape(1, s) 28 return img_wide[0] 29 30 31def main(): 32 img_dir = 'images/' 33 images = [img_dir + f for f in os.listdir(img_dir)] 34 labels = ['architecture' if 'architecture' in f.split('/')[-1] else 'food' for f in images] 35 36 data = [] 37 for image in images: 38 img = img_to_matrix(image) 39 img = flatten_image(img) 40 data.append(img) 41 42 data = np.array(data) 43 44 is_train = np.random.uniform(0, 1, len(data)) <= 0.7 45 y = np.where(np.array(labels) == 'architecture', 1, 0) 46 47 train_x, train_y = data[is_train], y[is_train] 48 49 # plot in 2 dimensions 50 pca = RandomizedPCA(n_components=2) 51 X = pca.fit_transform(data) 52 df = pd.DataFrame({"x": X[:, 0], "y": X[:, 1], 53 "label": np.where(y == 1, 'architecture', 'food')}) 54 colors = ['red', 'yellow'] 55 for label, color in zip(df['label'].unique(), colors): 56 mask = df['label'] == label 57 pl.scatter(df[mask]['x'], df[mask]['y'], c=color, label=label) 58 59 pl.legend() 60 pl.savefig('pca_feature.png') 61 62 # training a classifier 63 pca = RandomizedPCA(n_components=5) 64 train_x = pca.fit_transform(train_x) 65 66 svm = LinearSVC(C=1.0) 67 svm.fit(train_x, train_y) 68 joblib.dump(svm, 'model.pkl') 69 70 # evaluating the model 71 test_x, test_y = data[is_train == False], y[is_train == False] 72 test_x = pca.transform(test_x) 73 print pd.crosstab(test_y, svm.predict(test_x), 74 rownames=['Actual'], colnames=['Predicted']) 75 76if __name__ == '__main__': 77 main()
しかしながら、そのまま実行しても動きません。
とりあえず、images
というフォルダを同じ階層に作り、その中に適当に画像をほりこんで実行すると、
イメージのロードはできたようなのですが、
ValueError: setting an array element with a sequence.
が出ます。
サンプルにコメントがなく、そもそもに機械学習が全くわからないのでイマイチ流れが見えておりません。
このエラーもどうも複数の場合に発生するというのも出ていますし…
申し訳ないのですが、
- このプログラムの処理の流れ
- とりあえず機械学習を勉強するための、簡単なサンプルが載っているサイト
を教えていただけないでしょうか。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/29 16:56