TypeError: predict() got an unexpected keyword argument ‘k’ – CIFAR-10を使ったknnでエラー, Python2.7.12 – python

質問:


以下のリンクにあるCIFAR-10(ラベル付されたサイズが32×32のカラー画像8000万枚のデータセット)を読み取り、knnによりクラス分けしその精度を%で出力させたいのですが以下のエラー出てしまいました。問題は86行目のkにあるようですが解決方法がみつからず、何かアドバイス頂けると幸いです。

以下コード;

import pickle
import numpy as np
import os

def unpickle(file):
    fo = open(file, 'rb')
    dict = pickle.load(fo)
    fo.close()
    return dict

def conv_data2image(data):
    return np.rollaxis(data.reshape((3,32,32)),0,3)

def get_cifar10(folder):
    tr_data = np.empty((0,32*32*3))
    tr_labels = np.empty(1)
    '''
    32x32x3
    '''
    for i in range(1,6):
        fname = os.path.join(folder, "%s%d" % ("data_batch_", i))
        data_dict = unpickle(fname)
        if i == 1:
            tr_data = data_dict['data']
            tr_labels = data_dict['labels']
        else:
            tr_data = np.vstack((tr_data, data_dict['data']))
            tr_labels = np.hstack((tr_labels, data_dict['labels']))

    data_dict = unpickle(os.path.join(folder, 'test_batch'))
    te_data = data_dict['data']
    te_labels = np.array(data_dict['labels'])

    bm = unpickle(os.path.join(folder, 'batches.meta'))
    label_names = bm['label_names']
    return tr_data, tr_labels, te_data, te_labels, label_names


class NearestNeighbor(object):
  def __init__(self):
    pass

  def train(self, X, y):
    """ X is N x D where each row is an example. Y is 1-dimension of size N """
    # the nearest neighbor classifier simply remembers all the training data
    self.Xtr = X
    self.ytr = y

  def predict(self, X):
    """ X is N x D where each row is an example we wish to predict label for """
    num_test = X.shape[0]
    # lets make sure that the output type matches the input type
    Ypred = np.zeros(num_test, dtype = self.ytr.dtype)

    # loop over all test rows
    for i in xrange(num_test):
      # find the nearest training image to the i'th test image
      # using the L1 distance (sum of absolute value differences)
      distances = np.sqrt(np.sum(np.square(self.Xtr - X[i, :]), axis=1))
      min_index = np.argmin(distances) # get the index with smallest distance
      Ypred[i] = self.ytr[min_index] # predict the label of the nearest example

    return Ypred

if __name__ == '__main__':
    datapath = "./data/cifar-10-batches-py"

    Xtr, Ytr, Xte, Yte, label_names10 = get_cifar10(datapath)
    Xtr_rows = Xtr.reshape(Xtr.shape[0], 32 * 32 * 3)
    Xte_rows = Xte.reshape(Xte.shape[0], 32 * 32 * 3)
    # assume we have Xtr_rows, Ytr, Xte_rows, Yte as before
    # recall Xtr_rows is 50,000 x 3072 matrix
    Xval_rows = Xtr_rows[:1000, :]  # take first 1000 for validation
    Yval = Ytr[:1000]
    Xtr_rows = Xtr_rows[1000:, :]  # keep last 49,000 for train
    Ytr = Ytr[1000:]

    # find hyperparameters that work best on the validation set
    validation_accuracies = []

    for k in [1, 3, 5, 10, 20, 50, 100]:
        # use a particular value of k and evaluation on validation data
        nn = NearestNeighbor()
        nn.train(Xtr_rows, Ytr)
        # here we assume a modified NearestNeighbor class that can take a k as input
        Yval_predict = nn.predict(Xval_rows, k=k)
        acc = np.mean(Yval_predict == Yval)
        print 'accuracy: %f' % (acc,)

        # keep track of what works on the validation set
        validation_accuracies.append((k, acc))

以下エラー

Traceback (most recent call last): File
“C:/…/PycharmProjects/Convolutional Neural Networks for Visual
Recognition/knn.py”, line 86, in
Yval_predict = nn.predict(Xval_rows, k=k) TypeError: predict() got an unexpected keyword argument ‘k’

質問者: Naoki

先ずそもそもエラーの内容はpredictメソッドの定義に引数kがないのでエラーが出てます。あとソースを見るとpredictメソッドはk-nnではなく最近傍のみで識別する1-nnになっています。あと細かいとことですがコメントだとL1距離で図ることになっていますが謎?の方法で距離をとっているようです。引数kを追加し修正したpredictメソッドは以下のような感じでしょうか.

import collections

def predict(self, X, k):
  """X is N x D where each row is an example we wish to predict label for."""
  num_test = X.shape[0]
  # lets make sure that the output type matches the input type                                                                                                                                              
  Ypred = np.zeros(num_test, dtype = self.ytr.dtype)

  # loop over all test rows                                                                                                                                                                                 
  for i in xrange(num_test):
    # find the nearest training image to the i'th test image                                                                                                                                                
    # using the L1 distance (sum of absolute value differences)                                                                                                                                             
    distances = np.sum(np.absolute(self.Xtr - X[i, :]), axis=1)
    k_min_index = np.argsort(distances)[k] # get the index with k-smallest distance                                                                                                                         
    k_label = self.ytr[k_min_index] # predict the labels of the k-nearest example                                                                                                                           
    label, _ = collections.Counter(k_label).most_common(1)[0]   # count and extract most common element                                                                                                       
    Ypred[i] = label
  return Ypred

kこのラベルのうち最も多いラベルをカウントするためにcollection.Counterをつかっています。

出典

Related Posts:

NameErrorが出る – python
質問: 以下のコードを実行したいのですがエラーが出てしまいます。 解決方法を教えていただけると幸いです。 元のコードはdata-science-from-scratch/nearest_neighbors.pyにあります。 現在Pythonを学び始めたばかりなのですが、したいこととしてはk近傍方でk=1,3,5,7でどのような結果になるのか示したいと認識しています。 import math def knn_classify(k, labeled_points, new_point): """each labeled point should be a pair (point, label)""" # order the labeled ...
【Python3】Beautiful Soupについての質問 – python
質問: Beautiful Soupで <div class="hoge1"> <div class="hoge2"> <p>hogehoge</p> </div> </div> といったHTMLコードから<p>の部分を取得するにはどのようにしたら良いのでしょうか?   質問者: creamroid 下記ではいかがでしょうか。 from bs4 import BeautifulSoup html = """ <div class="hoge1"> ...
tensor flowのバージョンアップを行った結果、checkpointファイルのフォーマットが変更されている – python tensorflow
質問: tensorflowの学習モデルの出力フォーマットが以前のものとは変更されており、 model.ckptだけであったのが model.ckpt-1111.data-00000-of-000001, model.ckpt-1111.index, model.ckpt-1111.meta といった具合に3ファイルに変更されており対処に困っています。 どのckptファイルを参照するのか、またコード例が知りたいです。 ~~~下記は自分が使っているコードの一部です~~~ images_placeholder = tf.placeholder("float", shape=(None, IMG_PIXELS)) keep_prob = tf.placeholder("float") logits = inference(images_placeholder, keep_prob) sess = tf.InteractiveSession() saver = tf.train.Saver() sess.run(tf.global_variables_initializer()) saver.restore(sess, "model.ckpt") 質問者: nyannyan tensorflow r12よりcheckpointファイルのフォーマットが変更されております。 とりあえず過去フォーマットでsaveしたいのならば import tensorflow as tf from ...
jsonのtrueをTrueにしたい [クローズ済み] – python
質問: json = {"Hi":true} このHiのtrueをTrueにして論理演算できるようにしたいです。 質問者: たかなし json.dumps を使ってPythonのオブジェクトに変換できます。 >>> import json >>> d = json.loads('{"Hi":true}') >>> d {'Hi': True} 出典
tkinter の bad geometry specifier “200*100” というエラーの意味がよくわからない – python python3 tkinter
質問: このプログラムを実行しようとすると というメッセージが表示されます。 何が悪いのかよくわからないので一度Pythonをアンインストールして最新のPythonを再インストールしたのですが結果は変わりませんでした。 インストールする前のPathのチェック欄にはチェックを入れました。 すごく初歩的なことで恐縮ですが、お願いします。 質問者: 岸本真人 Kohei TAMURA 200*100ではなく、200x100ではないですかね。 tkinter の使い方は独特な所があり、色々とつまずくかも知れません。 使い方が解らないメソッドなどは help 関数などで説明を読むことができます。今回ですと、Pythonコード内で help(root.geometry) とすると、 Help on method wm_geometry in module tkinter: wm_geometry(newGeometry=None) method of ...
pythonからツイートの保存について – python twitter
質問: 下記のツイートを保存したいのですが上手くいきません。実行中でpython intento.py >> result.dat を書きました。 #-*- coding: utf-8 -*- from tweepy.streaming import StreamListener from tweepy import OAuthHandler from tweepy import Stream import json # Variables that contains the user credentials to ...
pythonパラメータエラーに関して(スクレイピング) – python
質問: いつもお世話になっております。 再度みなさまの知見をお借りしたく質問させていただきます。 ただいま、pyrhonでスクレイピングに挑戦をしていました。 実践しようとしているのはJRAのページの馬柱をスクレイピングしようとしていました。 url ='http://www.jra.go.jp/JRADB/accessD.html' fetched_dataframes = pandas.io.html.read_html(url) ...
異なるwebページからの情報取得を一本化したい – python
質問: 現在、Pythonを学習しています。 Google検索APIで「東京都 会社概要」と検索し、検索結果の各webページのURLを取得し、 それらのURL先をスクレイピングして会社概要を取得しようと考えています。 当たり前のことですが、各webページのhtmlの書き方が異なっていて、tableタグだったり、liタグだったりで上手く求めている情報を抽出できません。 何かアイデアがあれば教えて頂きたいです。 # コード1.googleAPI検索し、結果をjsonファイルに出力 import json import urllib.request import urllib.parse from urllib.request import urlopen QUERY = u'会社概要+東京都' key = 'KEY' cx = 'CX' NUM = 3 cseurl = 'https://www.googleapis.com/customsearch/v1?' params = ...
tensor flow をjupyter notebookで使っているんですがtensor boardが使えません。 – python tensorflow
質問: 初心者です。 tensor flow をjupyter notebookで使っているんですがtensor boardが使えません。 下記のプログラムをjupyter notebook上で打ち込んでtensorboad --logdir=/path/to/log をターミナルで打ち込みましたがうまくいきません。 教えてもらえると有難いです。 import tensorflow as tf import numpy as np import os LOG_DIR = os.path.join(os.path.dirname("__file__"), 'log') if os.path.exists(LOG_DIR) is False: os.mkdir(LOG_DIR) w ...
サイトが表示されません。 – python linux ubuntu
質問: https://github.com/blobmon/simplechan 上の掲示板をネット上に設置したのですが、ホーム画面は表示されるのですが、そこからクリックをして入ったら本来表示されるべきものが表示されません。クリックしたらこんなものが出てきます。 psycopg2.OperationalError OperationalError: FATAL: Peer authentication failed for user "simplech_role" Traceback (most recent call last) File "/root/simplechan/venv/lib/python2.7/site-packages/flask/app.py", line 2309, in __call__ return self.wsgi_app(environ, start_response) File "/root/simplechan/venv/lib/python2.7/site-packages/flask/app.py", line 2295, in ...
指定した通りに配列の要素を書き換えたい – python アルゴリズム
質問: 二次元配列の要素を、別の配列のデータに従って入れ替えたいです。 今、1つの配列に縦5横6の二次元配列があり、配列(array)の中身は全て "." で埋まっています。つまりarrayは array = [ , , , , # ←① ] となっています。 この "." を str_array 配列の数字に従って書き換えたいです。たとえば str_array が str_array ...
python3のエラー “TypeError: Tensors … that don’t all match” がわからない – python python3 tensorflow
質問: Traceback (most recent call last): File "/Users/oshikawaakinobu/anaconda3/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py", line 458, in _apply_op_helper raise TypeError() # All types should match. TypeError During handling ...
pip installコマンドでCould not open requirements file: [Errno 2] No such file or directory:というエラーが出る – python
質問: Colaというプログラムを使って、Weiboの投稿を取得したいです。pip install colaまではうまくいきますが 下記のコマンドを打つとエラーが表示されます。 エラーがなぜ起きるかわかる方がいれば教えてください。 # pip install -r/path/to/cola/app/weibo/requirements.txt Could not open requirements file: No such file or directory: '/path/to/cola/app/weibo/requirements.txt' 質問者: ...
ループ終了後に、結果を最後にまとめて取得したい – python
質問: 質問内容が分かりづらかったので、コードや欲しい結果を具体的に書きます ・再帰と勘違いしていたので、タイトルも変更しました 最終的にやりたいこと ・このリンク先にあるコード結果を、Bottleを使用してWeb画面上に表示したい 試したこと from urllib.request import urlopen from bs4 import BeautifulSoup import datetime import random import re from bottle import route, view random.seed(datetime.datetime.now()) def getLinks(articleUrl): html = urlopen("http://en.wikipedia.org"+articleUrl) ...
pyenvを使ってpythonをインストールしようとしているのですが。。。 – python
質問: pyenvを使ってMacにPythonの環境を構築する - Qiita このサイトに従ってpyenvを使ってpythonをインストールしようとしているのですがうまくいきません。 OSはmacの10.10.1です。 上記のサイトで言う所のpyenvにパスを通す、というところまではできたのですが、 その次のpyenvでpythonをインストールすることができません。 SSL/TLSが必要と出てきたのでぐぐってみたのですがいまいちよくわかりません。 どうすれば先に進めるでしょうか よろしくお願いします。 質問者: Kazutoshi Shinoda 3100 このあたりが参考になりそう。きっと良くなります。 pyenv のインストールメモ #python #mavericks - jitsu102's blog 出典

You Might Also Like

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です