2015-10-25 44 views
0

我目前正在研究:http://cs231n.github.io/assignment1/。正如你所看到的,它只是計算機視覺中非常非常非常非常基本的練習。但是我很難實施其中的內容。基本上我在這裏有這個文件:vision.stanford.edu/teaching/cs231n/assignment1.zip,我需要讓它運行。但在它我發現的第一行代碼是混亂:Python,iPython Notebook實現細節混淆

import random 
import numpy as np 
from cs231n.data_utils import load_CIFAR10 
import matplotlib.pyplot as plt 

cs231n.data_utils不承認,我不知道到指定機器知道目錄。我也不是很瞭解iPython Notebook,現在我只知道如何在線查看它,但我仍然無法運行代碼。我只是一個Python新手,我所知道的語言是我在命令行中輸入了幾行代碼,它會發揮魔力。這似乎太多了。請幫助我,非常感謝你!

更新:我發現一個快速的&骯髒的解決方案:將該文件夾放入默認目錄。但隨後彈出2個新錯誤:

1)首先出現此錯誤:在文件data_utils.py中有一行:import cPickle as pickle。它說:沒有名爲cPickle的模塊。我必須將名稱從cPickle更改爲_pickle才能運行。 2)這些代碼在這裏:

# Load the raw CIFAR-10 data. 
cifar10_dir = u'cs231n/datasets/cifar-10-batches-py' 
X_train, y_train, X_test, y_test = load_CIFAR10(cifar10_dir) 

# As a sanity check, we print out the size of the training and test data. 
#print ('Training data shape: ', X_train.shape) 
# print ('Training labels shape: ', y_train.shape) 
# print ('Test data shape: ', X_test.shape) 
#print ('Test labels shape: ', y_test.shape) 

錯誤:

UnicodeDecodeError      Traceback (most recent call last) 
<ipython-input-19-abf216ad1f9c> in <module>() 
     1 # Load the raw CIFAR-10 data. 
     2 cifar10_dir = u'cs231n/datasets/cifar-10-batches-py' 
----> 3 X_train, y_train, X_test, y_test = load_CIFAR10(cifar10_dir) 
     4 
     5 # As a sanity check, we print out the size of the training and test data. 

C:\Users\son\assignment1\cs231n\data_utils.py in load_CIFAR10(ROOT) 
    20 for b in range(1,6): 
    21  f = os.path.join(ROOT, u'data_batch_%d' % (b,)) 
---> 22  X, Y = load_CIFAR_batch(f) 
    23  xs.append(X) 
    24  ys.append(Y) 

C:\Users\son\assignment1\cs231n\data_utils.py in load_CIFAR_batch(filename) 
     7 """ load single batch of cifar """ 
     8 with open(filename.encode('utf-8'), u'rb') as f: 
----> 9  datadict = pickle.load(f) 
    10  X = datadict[u'data'] 
    11  Y = datadict[u'labels'] 

UnicodeDecodeError: 'ascii' codec can't decode byte 0x8b in position 6: ordinal not in range(128) 

這裏是data_utils文件:

# import cPickle as pickle 
import _pickle as pickle 
import numpy as np 
import os 

def load_CIFAR_batch(filename): 
    """ load single batch of cifar """ 
    with open(filename, u'rb') as f: 
    datadict = pickle.load(f) 
    X = datadict[u'data'] 
    Y = datadict[u'labels'] 
    X = X.reshape(10000, 3, 32, 32).transpose(0,2,3,1).astype(u"float") 
    Y = np.array(Y) 
    return X, Y 

def load_CIFAR10(ROOT): 
    """ load all of cifar """ 
    xs = [] 
    ys = [] 
    for b in range(1,6): 
    f = os.path.join(ROOT, u'data_batch_%d' % (b,)) 
    X, Y = load_CIFAR_batch(f) 
    xs.append(X) 
    ys.append(Y) 
    Xtr = np.concatenate(xs) 
    Ytr = np.concatenate(ys) 
    del X, Y 
    Xte, Yte = load_CIFAR_batch(os.path.join(ROOT, u'test_batch')) 
    return Xtr, Ytr, Xte, Yte 

非常感謝您!

回答

0

如果您是python的新手,那麼您可以通過這個任務跳入深層次 - 如果您開始正確的話,python的學習曲線會很平緩。

在你編碼之前,你應該設置和熟悉筆記本。請參閱here開始。安裝依賴關係是熊(或習慣),所以我建議下載Anaconda Scientific Python發行版,其中包含您需要的一切。

對於導入cs231n模塊,最快的解決方案是將文件夾cs231n放在包含筆記本(或.py腳本)的文件夾中。稍後,您可以通過Google PYTHONPATH並在您方便時進行設置。

祝你好運!

PS。我只是看着你的課程文件夾,它看起來像你的老師照顧的依賴!如果您按照指示行事並且無效,請聯繫他或她。

+0

我已經搜索了PYTHONPATH,並且我遵循了他們的建議之一:設置一個環境變量,將其命名爲PYTHONPATH,並將其目錄指定到cs231文件夾。當我再次運行時,它確實找到了目錄,但它又產生了另一個奇怪的錯誤:將cPickle導入爲pickle; ImportError:沒有名爲'cPickle'的模塊。我很困惑 – TruongTroll

+0

如果您使用的是python 3,但是您正在嘗試導入爲python 2編寫的代碼,那麼您報告的錯誤將會發生。這將導致很多奇怪的錯誤。聽起來像你需要拋棄你的python並安裝2.7(呃),最好是在virtualenv建議。 – alexis

+0

你有沒有學習你的導師指導?他們看起來像是爲了給你設置一切。 – alexis

0

我認爲這兩個錯誤都是關於python的兼容性。這個賦值代碼是用python2.7編寫的,我不知道你在用python3嗎?如果你是,你最好改用python2.7。

順便說一句,這是一個非常晚的答案。