python +numpy,theano,cifar

來源:互聯網
上載者:User

python裡的運算子是根據對象的類型來判斷的,如果a,b是list,則a+b是2個list相加,並成一個list,

如果要做elementwise的運算,實現a,b裡的元素各自相加,則要寫代碼。

於是寫了段for 代碼,來做,速度實在是慢啊。

numpy裡提供了numpy.add,numpy.multiply等elementwise 的運算。速度快很多。

相同的操作,用python的for代碼,加下標訪問,要30分鐘。

numpy則直接秒了。。。

numpy還可以方便的把數組的類型進行轉換,用numpy.astype或者直接在numpy.asarray是設定新對象的類型。

非常好用啊。

貌似theano就是針對神經網路,比numpy更最佳化了幾個運算,比如grad,scan。

theano中tensor下的內容,以張量處理為主,操作對象是符號變數。比如,T.grad處理的是一個代數式,得到的也是一個代數式

而theano目錄下的function,scan處理的是資料,如function定義了輸入資料,輸出資料,運算公式。處理的也是符號變數。scan可以看做對做迴圈計算的function函數。

和numpy一樣,theano的函數也是elementwise的。

function也只是定義了輸入,輸出的類型,得到一個進一步的公式,編譯轉成c代碼。

編譯function後,得到的c函數,可以直接在python中調用。才是我們最後做運算的東西。

因為,可能有多個函數要用到同一個資料區塊。所以theano中用到了共用變數,可以在多個function中共用一個記憶體塊。可能(我猜猜猜)一個function就是一個dll檔案。

theano有自己的記憶體塊。(前面寫的---theano中的share變數不好理解,why shared?when shared?how borrow?)。現在有點清晰了。

google group上的 james 同學給我的解釋,很管用。

Good question. Shared vars were introduced to make GPU programming
easier, you're right about that. But they have another use too -
shared variables allow update expressions in theano.function. Update
expressions are a common pattern for iterative algorithms, and shared
variables are automatically eligible for in-place updates, which can
be faster.

borrow=False means you are guaranteed to get back something that is
not aliased to any memory that will be changed by subsequent calls to
a function. It's similar to numpy.array(v.get_value(borow=True))
except that in some cases (like when v is on GPU) no copy is
necessary. borrow=False in set_value also means that no theano
function will change your value by side-effect.

 

用shared 變數,記憶體memory aliased 技術,可以節約記憶體,減少記憶體拷貝,GPU運算必備啊。

 

theano寫代碼的過程就是建模,資料,測試。真的是非常適合科學計算。

當然,任何一個問題都是建模,資料,測試。只是其他語言是建模,編碼,資料,測試。theano支援符號變數,所以感覺上建模即是編碼。很好用。

numpy用的也不是符號變數。

把logistic_sgd.py在cifar上運行了。正確率很低,很低。速度倒是很快。

Optimization complete with best validation score of 77.708333 %,with test performance 77.645833 %
The code run for 75 epochs, with 2.071545 epochs/sec

 

下面再試下mlp。mlp的效果很差,還不如上面logistic classifer

epoch 52, minibatch 2000/2000, validation error 90.050000 %
epoch 53, minibatch 2000/2000, validation error 90.040000 %
epoch 54, minibatch 2000/2000, validation error 90.060000 %
epoch 55, minibatch 2000/2000, validation error 90.100000 %

換個電腦的最好成績是85%。

cnn好像沒法直接試,因為映像大小是32*32,不是29*29,卷積層會出錯。再改下。明天再試。

cnn改了第一層的卷積大小來適應cifar,成績是53%。cnn就是牛逼啊,featuremap感覺比dbn的layers 更合理呢。dbn同一層,應該支援多個featuremap和共用權值才好。

rbm。計算損失函數時是做cd-15,實在慢,改成了cd-1,文章中不是說cd-1也很好用嘛。等周末的時候再開著做一個cd-15看看。

dbn

PIL庫,可以把數組儲存為映像。而且也支援numpy數組。

img=PIL.Image.fromarray(a)

img.save('......')

很好用。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.