1. 程式人生 > >CS231n(一)Image Classification Notes

CS231n(一)Image Classification Notes

影象分類問題:就是已有固定的分類標籤集合,然後對於輸入的影象,從分類的標籤集合中找到一個分類標籤,最後把分類標籤分配給該輸入影象。也就是給定一個影象,預測它屬於的那個分類標籤。

Nearest Neighbir 分類器

需衡量樣本間的距離,就是將兩張圖片先轉化為兩個向量I1和I2,然後計算他們的距離(針對所有的畫素)。

用L1距離作為例子:

L1距離(曼哈頓距離):

L2距離(歐式距離):

k-Nearest Neighbor分類器

找最相似的k個圖片的標籤,然後讓他們針對測試圖片進行投票,最後把票數最高的標籤作為對測試圖片的預測。所以當k=1的時候,k-Nearest Neighbor分類器就是Nearest Neighbor分類器。

N折交叉驗證:將訓練集平均分成5份,其中4份用來訓練,1份用來驗證。然後我們迴圈著取其中4份來訓練,其中1份來驗證,最後取所有5次驗證結果的平均值作為演算法驗證結果。

NN分類器的優點:易於理解實現簡單。

                   缺點:要記錄全部的訓練資料,演算法測試速度超級慢,過於依賴特徵(影象特徵不好找)因而準確率不高。

Tensorflow實現KNN演算法:(k=1)

這裡10000條資料的784個畫素分別減去200條測試樣本的每一條(一次迴圈匯入一條)

[[1,...,784],

[1,...,784],

.

.

.

[1,...,784]]

import numpy as np
import tensorflow as tf

#load data
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

#選擇1000條候選樣本,200條測試樣本,測試樣本跟候選樣本比較得到最近的K個樣本,則k個樣本的標籤大多數為某一類,測試樣本就為哪一類。

Xtr, Ytr = mnist.train.next_batch(10000)
Xte, Yte = mnist.train.next_batch(200)

#TF Graph Input 佔位符 用來feed資料
xtr = tf.placeholder(tf.float32, [None,784])
xte = tf.placeholder(tf.float32, [784])

#最近鄰使用L1距離(曼哈頓距離)
distance = tf.reduce_sum(tf.abs(tf.add(xtr, tf.negative(xte))), reduction_indices=1)

#預測
pred = tf.arg_min(distance, 0)

accuracy = 0

#初始化
sess = tf.Session()
                               
sess.run(tf.global_variables_initializer())

#
for i in range(len(Xte)):
    # Get nearest neighbor
    nn_index = sess.run(pred, feed_dict={xtr: Xtr, xte: Xte[i, :]})  #每次迴圈feed資料,候選Xtr全部,測試集Xte一次迴圈輸入一條
    # 獲得與測試樣本最近樣本的類別,計算與真實類別的誤差
    if i % 10 ==0:
        print("Test", i, "Prediction:", np.argmax(Ytr[nn_index]), "True Class:", np.argmax(Yte[i]))
    # 計算誤差率
    if np.argmax(Ytr[nn_index]) == np.argmax(Yte[i]):
        accuracy += 1. / len(Xte)
print('Done!')
print("Accuracy:", accuracy)

結果:

Test 0 Prediction: 8 True Class: 8

Test 10 Prediction: 0 True Class: 0

Test 20 Prediction: 4 True Class: 4

Test 30 Prediction: 3 True Class: 3

Test 40 Prediction: 2 True Class: 2

Test 50 Prediction: 4 True Class: 4

Test 60 Prediction: 3 True Class: 3

Test 70 Prediction: 8 True Class: 8

Test 80 Prediction: 1 True Class: 1

Test 90 Prediction: 5 True Class: 5

Test 100 Prediction: 6 True Class: 6

Test 110 Prediction: 2 True Class: 2

Test 120 Prediction: 3 True Class: 3

Test 130 Prediction: 5 True Class: 5

Test 140 Prediction: 8 True Class: 8

Test 150 Prediction: 8 True Class: 8

Test 160 Prediction: 4 True Class: 4

Test 170 Prediction: 2 True Class: 2

Test 180 Prediction: 6 True Class: 6

Test 190 Prediction: 8 True Class: 8

Done!

Accuracy: 0.9400000000000007

相關推薦

CS231nImage Classification Notes

影象分類問題:就是已有固定的分類標籤集合,然後對於輸入的影象,從分類的標籤集合中找到一個分類標籤,最後把分類標籤分配給該輸入影象。也就是給定一個影象,預測它屬於的那個分類標籤。 Nearest Neighbir 分類器 需衡量樣本間的距離,就是將兩張圖片先轉化為兩個向

CS231n 學習筆記1 Image CLassification

eight function 分享 便是 數據驅動 rain 分類問題 很難 特征 圖像分類是計算機視覺中的一項核心任務,那麽什麽是圖像分類? 例如,給你一個標簽集,其中包括(貓、狗、鳥、卡車、飛機...等) 然後給你一張圖片,那麽這張圖片屬於哪個類別呢?這就是一個分類

CS231n:基礎知識

深度學習 highlight 自己 元組 .py [0 upper bsp python 給自己新挖個坑:開始刷cs231n深度學習。 看了一下導言的pdf,差缺補漏。 s = "hello" print s.capitalize() # 首字母大寫; prints "

神經網路學習筆記1Image Classification

學習網站: 資料驅動方法 KNN(例如採用L1曼哈頓距離) 程式碼如下: import numpy as np class NearestNeighbor: def train(self,X,y): self.Xtrain=X self

python手記:pillow image

生活不易且無趣,一起找點樂子吧。歡迎評論,和文章無關的也可以。       上次的那篇文章裡,我們最後說到了,Image的merge方法,合併。有些地方說的並不準確,我再重新說下。剩餘一些其他的方法,這裡也捎帶著一起說了。 一、filter方法:

CS231nBack Propagation Notes

反向傳播是利用鏈式法則遞迴計算表示式的梯度的方法。 導數的意義:函式變數在某個點周圍的極小區域內變化,而導數就是變數變化導致的函式在該方向上的變化率。 函式關於每個變數的導數指明瞭整個表示式對於該變數的敏感程度。 使用鏈式法則計算複合表示式 知識回顧:

CS231n Assiganment#1解析——KNN

前言           前段時間學習了深度學習入門課程斯坦福CS231n,鞏固和理解課程的最佳方式就是完成課後程式碼作業。在這裡記錄下本人對作業的思考和解析,以供大家參考。   &

Image Caption 論文及理解

準備開始讀一下Image Caption,先記錄一下對論文的理解,一些公式沒有記錄下來,在論文中可查。 目錄 1.Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Transla

EmguCV Image類中的函式

轉載自http://blog.csdn.net/qq_22033759/article/details/47807553 1、Image<TColor, TDepth> AbsDiff     返回兩幅圖片或此圖與某個yanse畫素的差的絕對值的圖片 2

CS231n作業KNN分類

作業說明 學習ML和DL很關鍵的兩點在於對最基本的演算法的理解,以及通過程式設計將演算法復現的能力。做好這兩點,才有實現更加複雜演算法與工作的可能。否則,只會調包,跑跑開原始碼,永遠是重複別人的工作,沒有自己的理解,也就無法將演算法應用到實際任務中來。 還好有cs231n

python手記:pillowGIF處理,RGBA處理,Image例項屬性總結

GIF儲存方法: 上次我們說到了gif動態圖片怎樣一張張將它分解,這次我們來說下怎樣把幾張單的gif組合成動態圖片。 im.save(out, save_all = True, append_images=[im1, im2......]) 基本的方法就

subsampling-scale-image-view部分載入bitmap原始碼分析

subsampling-scale-image-view原始碼分析背景介紹使用原始碼分析總結參考 背景 對於安卓開發人員,最頭疼的問題就是記憶體問題了,而記憶體問題又當屬bitmap最頭疼,雖然說現在市面上已經有越來越多成熟的圖片載入框架,像Fresco,Gli

Android 開源框架Universal-Image-Loader完全解析--- 基本介紹及使用

                大家好!差不多兩個來月沒有寫文章了,前段時間也是在忙換工作的事,準備筆試面試什麼的事情,現在新工作找好了,新工作自己也比較滿意,唯一遺憾的就是自己要去一個新的城市,新的環境新的開始,希望自己能儘快的適應新環境,現在在準備交接的事情,自己也有一些時間了,所以就繼續給大家分享And

斯坦福CS231n專案實戰:k最近鄰kNN分類演算法

k最近鄰分類(kNN,K Nearest neighbor)分類演算法是一種最簡單的分類器之一。在kNN演算法訓練過程中,它將所有訓練樣本的輸入和輸出label都儲存起來。測試過程中,計算測試樣本與每個訓練樣本的L1或L2距離,選取與測試樣本距離最近的前k個

立體匹配CNN篇 :[LW-CNN] look wider to match image patches by cnn

Abstract 2016 IEEE SPL 目前在middlebury上排名第二 提出一種新的CNN 模式,通過一個較大尺寸視窗來學習一個matching cost 與以往的池化層不同(with strides),the proposed

CS231n課程學習筆記——KNN的實現

作業講解 KNN的實現主要分為兩步: 訓練:分類器簡單地記住所有的資料 測試:測試資料分別和所有訓練資料計算距離,選取k個最近的訓練樣本的label,通過投票(vote)獲得預測值。 在cs231n\classifiers資料夾中的 k_n

影象分割Contour Detection and Hierarchical Image Segmentation

三個部分: gPb: global probability of boundary OWT: Oriented Watershed Transform UCM: Ultrametric Contour Map 針對各個畫素,計算其作為邊緣的權值(可能性)

Android-Universal-Image-Loader 學習筆記 基本配置與使用

package com.nostra13.universalimageloader.core; import android.content.Context; import android.content.res.Resources; import android.util.DisplayMetrics;

Python影象處理庫PIL的Image模組介紹

Image模組是PIL中最重要的模組,它有一個類叫做image,與模組名稱相同。Image類有很多函式、方法及屬性,接下來將依次對image類的屬性、函式和方法進行介紹。 1、  Format 定

Python 接口測試

blog 系統環境變量 resp 環境變量 nbsp 們的 www nload uic 1. 概念: 接口測試是測試系統組件間接口的一種測試。接口測試主要用於檢測外部系統與系統之間以及內部各個子系統之間的交互點。測試的重點是要檢查數據的交換,傳遞和控制管理過程,以及系統間的