W!o+ 的《小伶鼬工坊演義》︰神經網絡【MNIST】八

一個小小實驗︰辨識『印刷』的阿拉伯數字

Figure 0_Gray

 

,竟然『network.py』會誤以為是『3』!!難道說『印刷』字能比『手寫』更難辨認的嗎??或許答案就落在那個『0』是有『位移』的吧??而那個小程式之『訓練』時用之『手寫數字』資料庫可都是計算過『圖心』的哩!!

THE MNIST DATABASE
of handwritten digits
Yann LeCun, Courant Institute, NYU
Corinna Cortes, Google Labs, New York
Christopher J.C. Burges, Microsoft Research, Redmond

……

The original black and white (bilevel) images from NIST were size normalized to fit in a 20×20 pixel box while preserving their aspect ratio. The resulting images contain grey levels as a result of the anti-aliasing technique used by the normalization algorithm. the images were centered in a 28×28 image by computing the center of mass of the pixels, and translating the image so as to position this point at the center of the 28×28 field.

───

 

因此『訓練』的『條件』以及『環境』也就決定了『network.py』所擅長之『辨識零點』的了!!??如是看來人類的『視覺』當真是厲害得很也!!否則如何能作『幾何論證』乎??豈能發現『九點圓』的呢??!!

人們如何發掘『現象』間的『關係』?怎麼探討事物的『性質』 ?因何能發現且證明隱晦的『數學定理』?!也許讀讀維基百科上『九點圓 』詞條一小段文本︰

九點圓

九點圓(又稱歐拉圓費爾巴哈圓),在平面幾何中,對任何三角形,九點圓通過三角形三邊的中點、三高的垂足、和頂點到垂心的三條線段的中點。九點圓定理指出對任何三角形,這九點必定共圓。而九點圓還具有以下性質:

  • 九點圓的半徑外接圓的一半,且九點圓平分垂心與外接圓上的任一點的連線。
  • 圓心歐拉線上,且在垂心外心的線段的中點。
  • 九點圓和三角形的內切圓旁切圓相切(費爾巴哈定理)。
  • 圓周上四點任取三點做三角形,四個三角形的九點圓圓心共圓(庫利奇-大上定理)。

200px-Triangle.NinePointCircle.svg    九點圓

EulerCircle4

Even if the orthocenter and circumcenter fall outside of the triangle, the construction still works.

歷史

1765年,萊昂哈德·歐拉證明:「垂心三角形和垂足三角形有共同的外接圓(六點圓)。」許多人誤以為九點圓是由而歐拉發現所以又稱乎此圓為歐拉圓。而第一個證明九點圓的人是彭賽列(1821年) 。1822年,卡爾·威廉·費爾巴哈也發現了九點圓,並得出「九點圓和三角形的內切圓旁切圓相切」,因此德國人稱此圓為費爾巴哈圓,並稱這四個切點費爾巴哈點庫利奇大上分別於1910年與1916年發表庫利奇-大上定理「圓周上四點任取三點做三角形 ,四個三角形的九點圓圓心共圓。」這個圓還被稱為四邊形的九點圓,此結果還可推廣到n邊形。

九點圓證明

364px-Nine-point_circle.svg

如圖:DEF為三邊的中點,GHI為垂足,JKL為和頂點到垂心的三條線段的中點。

  • 因此\overline{FJ} // \overline{BH} // \overline{DL}
  • 同樣可得出 \triangle ABC \sim \triangle FBD  \triangle ASC \sim \triangle JSL (SAS相似)
  • 因此\overline{FD} // \overline{AC} // \overline{JL}
  • \overline{BH} \perp \overline{AC},可得出四邊形DFJL矩形(四點共圓)
  • 同理可證FKLE也是矩形(DKFJEL共圓)
  • \angle JLD = \angle JGD = 90^\circ,因此可知G也在圓上(圓周角相等)
  • 同理可證HI兩點也在圓上(九點共圓)

───

可以當成發想的起 點。假使設想姑且不論到底是怎樣『發現』的,且談已經『被發現』後,是否人們就能容易了解那些『關係』、『性質』、以及『證明』呢?有人說︰閱讀『證明』 容易,動手『證明』困難。似乎是講,既然都已理解了『證明』,焉有不曉『關係』與『性質』的耶!!若說條條大路通『羅馬』,就算盡觀了那些條條大路的景 緻,和『羅馬』之風光能夠彼此比較的嗎?? !!更何況『始、中、終』的『學習』循環不斷,舊『終』則啟新『始』布線織網深化『閱歷』。所以『學問』浸潤良久總有所悟,宛如說今日這門古老的『幾何學』,是以前那門新創之『幾何學』的嗎!!??

─── 摘自《勇闖新世界︰ W!o《卡夫卡村》變形祭︰品味科學‧教具教材‧【專題】 PD‧箱子世界‧九點圓

 

更不要講或許人類還能超越『視覺了別』,創想『非歐幾何學』,試圖理解那『生之、育之』之大自然耶!!!

歐幾里得』的『平行公設』 ── 經過『線外』一『』,只能作一條『平行線』平行該『 ──,或許正因為不夠『直覺』,然而有人將它看成了『公理』,於是乎長期以來議論不斷,如此經過了兩千多年。一八二零年時,俄國數學家『尼古拉‧伊萬諾維奇‧羅巴切夫斯基』 Никола́й Ива́нович Лобаче́вский 想用『歸謬法』證明︰假使僅『反對』了『平行公設』 ── 假設有兩條平行線 ── ,但是卻『保留』著『其它公設』,這樣的『幾何系統』是不是會發生內部 之『邏輯矛盾』的呢?本來是想『證明』平行公設的『必要性』,結果意外『成立』了一門『新的幾何學』,這就是第一個被提出的『非歐幾何學』。如果從『羅氏幾何學』建構方法來看,我們可以『知道』只要『選擇』邏輯上不矛盾的『一些公理』都有可能『成立』一種『幾何學』。這樣我們的『大自然』它會『選擇』特定的『幾何學』的嗎?假使果真有這個『幾何學』,我們又要『依據』什麼才能『判斷』它是『真實』的呢??因此我們或許更當 細思『先驗知識』與『後驗知識』之間的大哉『』與『』的吧!!

400px-Noneuclid

三種平行假設

Teorema_de_desargues.svg
笛沙格定理

如果A.a,B.b,C.c 共點,那麼 (A.B)∩(a.b),(A.C)∩(a.c),(B.C)∩(b.c) 共線。

200px-Hyperbolic_triangle.svg
雙曲面幾何學
多條平行線

Triangle_on_spherical_plane
球面幾何學
沒有平行線

假使對『大自然』的『認識』就像是『知識之拼圖』,作為一個科學的『觀察者』,通常需要『考察』那些『已知的碎片』能不能夠『融匯』成為那一整張『全景圖』,往往還得『研判』以為『拼起的圖象』它會不會『引發』彼此之間『不同調』的『矛盾』。終究『科學』以『實驗觀察』之『現象事實』為『依據』,從所得之『量測數據』建立『假說』,提出『理論』來『解釋』自然萬象。要是『輕忽』了這個『本末』,可能會將『物理方程式』只當成了『數學系統』來『研究』,『忘卻』了『物理量』本是為著『描述自然』而『』的,如果說『宇宙』中根本『沒有』那種量,它又怎麼能有『物理意義』的呢?比方講,從日常生活的『經驗』裡,我們『知道』拋一個『』,它總是會『停下來』的。於是在『力學』中有所謂的『摩擦力』用以『說明』它的『原因』。然而不同的『形狀』、相異的『接觸面』以及物體『速度大小』種種『因素』都可能影響這個『摩擦力』的大小。假使從『物理近似』的觀點來看,假設那個『摩擦力大小』正比於『速度大小』,方向與『運動方向』相反,『數學上』表示為 f_r = - \alpha \cdot v, \ \alpha > 0。這個『函數』符合物理上『摩擦力』的『想法』︰

一、 v = 0 \Longrightarrow f_r = 0

二、 v > 0, \Longrightarrow f_r < 0

三、 v < 0, \Longrightarrow f_r > 0

,於是我們會想 f_r = - \beta \cdot v^2, \ \beta > 0 這個『形式』的『摩擦力』應該『不合理』的了。為什麼呢?因為當 v < 0 時  f_r < 0,那個『摩擦力』總『不可能』產生『加速』的吧!然而當我們將物理的『運動方程式』用『數學』來表達時,它就是一個『數學方程式』了,如果只就它的『數學求解』而言,那麼它的『數學近似』應該是『合理的』吧!這樣我們當考慮『摩擦力』的『修正項』時,假設它是 \pm \beta \cdot v^2 這在物理上『合理的』嗎?簡單分析一下 f_r = - \alpha \cdot v \pm \beta \cdot v^2, \ \alpha  , \beta > 0,當 f_r = 0 時,它有兩個『v = 0, v = \pm \frac{\alpha}{\beta},它雖然不可能在速度之『全域』上『符合』物理上對『摩擦力』的想法,不過某個速度的『範圍』內,它的確是『符合』的啊!如此到底就『物理近似』的『意義』來講,這個『範圍限定』是『』還是『不可』的呢?如果審思『物理量』的『』 ⊕ 應該如何『計算』,是由『自然律』得來的,因此它在『意義』上就與『數學的加』 + 有一定的『不同』。也可以說『數學近似』的『過程結果』,一般還是需要『合理的』物理之『解釋』。要是說因為 f_r = - \alpha \cdot v - \beta \cdot v^2 - \gamma \cdot v^3 可以在速度的『全域』上『符合』物理上對『摩擦力』的想法,所以在物理上它就比 f_r = - \alpha \cdot v, \ \alpha > 0 是更好的『近似描述』,豈不怪哉!!

280px-Albert_Einstein_1979_USSR_Stamp

E = m c^2

於是乎當我們在談論『時間』、『空間』、『運動』、『物質』、『光速』以及『能量』等等時,必須『留意』的是許多的『物理概念』早就是『彼此相關』、『緊密聯繫』……『互為詮釋』之『參天大樹』,需要著一個『整體觀』以免會『自相矛盾』的啊!!

─── 摘自《【Sonic π】電聲學之電路學《四》之《 !!!! 》上

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

W!o+ 的《小伶鼬工坊演義》︰神經網絡【MNIST】七

子曰:

學而不思則罔,思而不學則殆。

因此請思考底下互動程式意欲何為乎??!!

>>> import mnist_loader
>>> training_data, validation_data, test_data = \
... mnist_loader.load_data_wrapper()
>>> import network
>>> net = network.Network([784, 30, 10])
>>> npzfile = network.np.load("swb.npz")
>>> npzfile.files
['s', 'b2', 'w2', 'w1', 'b1']
>>> net.weights[0] = npzfile["w1"]
>>> net.weights[1] = npzfile["w2"]
>>> net.biases[0] = npzfile["b1"]
>>> net.biases[1] = npzfile["b2"]
>>> net.evaluate(test_data=test_data)
9499
>>> from PIL import Image, ImageDraw, ImageFont
>>> import matplotlib.pyplot as plt


>>> font = ImageFont.truetype("/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc",28)
>>> im_0 = Image.new("RGB",(28,28))
>>> draw_0 = ImageDraw.Draw(im_0)
>>> draw_0.text((0,0), "0", font=font)
>>> np_im_0 = network.np.asarray(im_0)
>>> plt.imshow(np_im_0,cmap='Greys', interpolation='nearest')
<matplotlib.image.AxesImage object at 0x5466d50>
>>> plt.show()
>>> np_im_0.size
2352

 

Figure 0_RGB

 

>>> im_0g = im_0.convert('L')
>>> np_im_0g = network.np.asarray(im_0g)
>>> plt.imshow(np_im_0g,cmap='Greys', interpolation='nearest')
<matplotlib.image.AxesImage object at 0x40ba290>
>>> plt.show()
>>> np_im_0g.size
784
>>> np_im_0gc = np_im_0g.reshape(784,1)
>>> net.feedforward(np_im_0gc)
array([[  4.97894890e-13],
       [  3.26055003e-07],
       [  2.68689931e-07],
       [  9.99951724e-01],
       [  6.39075045e-09],
       [  3.00937517e-09],
       [  5.28623209e-13],
       [  9.97879811e-01],
       [  5.07832499e-11],
       [  5.27639416e-17]])
>>> network.np.argmax(net.feedforward(np_im_0gc))
3
>>>

 

Figure 0_Gray

 

【參考資料】

Image Module

The Image module provides a class with the same name which is used to represent a PIL image. The module also provides a number of factory functions, including functions to load images from files, and to create new images.

Examples

The following script loads an image, rotates it 45 degrees, and displays it using an external viewer (usually xv on Unix, and the paint program on Windows).

Open, rotate, and display an image (using the default viewer)

from PIL import Image
im = Image.open("bride.jpg")
im.rotate(45).show()

───

 

ImageFont Module

The ImageFont module defines a class with the same name. Instances of this class store bitmap fonts, and are used with the PIL.ImageDraw.Draw.text() method.

PIL uses its own font file format to store bitmap fonts. You can use the :command`pilfont` utility to convert BDF and PCF font descriptors (X window font formats) to this format.

Starting with version 1.1.4, PIL can be configured to support TrueType and OpenType fonts (as well as other font formats supported by the FreeType library). For earlier versions, TrueType support is only available as part of the imToolkit package

Example

from PIL import ImageFont, ImageDraw

draw = ImageDraw.Draw(image)

# use a bitmap font
font = ImageFont.load("arial.pil")

draw.text((10, 10), "hello", font=font)

# use a truetype font
font = ImageFont.truetype("arial.ttf", 15)

draw.text((10, 25), "world", font=font)

───

 

ImageDraw Module

The ImageDraw module provide simple 2D graphics for Image objects. You can use this module to create new images, annotate or retouch existing images, and to generate graphics on the fly for web use.

For a more advanced drawing library for PIL, see the aggdraw module.

Example: Draw a gray cross over an image

from PIL import Image, ImageDraw

im = Image.open("lena.pgm")

draw = ImageDraw.Draw(im)
draw.line((0, 0) + im.size, fill=128)
draw.line((0, im.size[1], im.size[0], 0), fill=128)
del draw

# write to stdout
im.save(sys.stdout, "PNG")

───

 

 

 

 

 

 

 

 

 

 

 

 

 

W!o+ 的《小伶鼬工坊演義》︰神經網絡【MNIST】六

所謂的

軟體測試

軟體測試英語:software testing),描述一種用來促進鑑定軟體正確性完整性安全性品質的過程。據此,您可能會想,軟體測試永遠不可能完整的確立任意電腦軟體的正確性。然而,在可計算理論(計算機科學的一個支派)一個簡單的數學證明推斷出下列結果:不可能完全解決所謂「當機」,指任意電腦程式是否會進入無窮迴圈,或者罷工並產生輸出問題。換句話說,軟體測試是一種實際輸出與預期輸出間的稽核或者比較過程。

軟體測試的經典定義是:在規定的條件下對程式進行操作,以發現程式錯誤,衡量軟體品質,並對其是否能滿足設計要求進行評估的過程。

軟體測試有許多方法,但對複雜的產品執行有效測試不僅僅是研究過程,更是創造並嚴格遵守某些呆板步驟的大事。測試的其中一個定義:為了評估而質疑產 品的過程;這裡的「質疑」是測試員試著對產品做的事,而產品以測試者腳本行為反應作為回答。雖然大部分測試的智力過程不外乎回顧、檢查,然而「測試」這個 詞意味著產品動態分析──讓產品流暢運行。程式品質可能,而且通常會,隨系統不同而有差異;不過某些公認特性是共通的:可靠性穩定性輕便性易於維護、以及實用性。請參照至ISO標準ISO 9126有更詳盡的說明。

軟體測試介紹

軟體測試一度被認為是編程能力偏低的員工的工作,直到今天,仍然有許多公司把優秀的人才放在編碼上,也有更多公司讓優秀的人才進行設計,可是很少公司讓優秀的人才進行測試工作。實際的軟體工程實踐證明,讓對軟體思想有深刻理解的工程師進行軟體測試的,可以大幅度的提高軟體品質。

───

 

常是個倍受誤解的領域!?或因錯讀孫子兵法的『攻守之道』︰

220px-Inscribed_bamboo-slips_of_Art_of_War

一九七二年

銀雀山出土的

《孫子兵法》竹簡

孫子兵法‧軍形第四

孫子曰:昔之善戰者,先為不可勝,以待敵之可勝。不可勝在己,可勝在敵。故善戰者,能為不可勝,不能使敵之必可勝。故曰:勝可知,而不可為。

不可勝者,守也;可勝者,攻也。守則有餘,攻則不足。善守者,藏於九地之下;善攻者,動於九天之上,故能自保而全勝也。

不過眾人之所知,非善之善者也;戰勝而天下曰善,非善之善者也。故舉秋毫不為多力,見日月不為明目,聞雷霆不為聰耳。

古之所謂善戰者,勝於易勝者也。故善戰者之勝也,無智名,無勇功。故其戰勝不忒。不忒者,其所措必勝,勝已敗者也。故善戰者,立於不敗之地,而不失敵之敗也。是故勝兵先勝而後求戰,敗兵先戰而後求勝。善用兵者,修道而保法,故能為勝敗之政。

兵法:一曰度,二曰量,三曰數,四曰稱,五曰勝。地生度,度生量,量生數,數生稱,稱生勝。故勝兵若以鎰稱銖,敗兵若以銖稱鎰。勝者之戰民也,若決積水於千仞之溪者,也。

俗話說︰勝敗乃兵家常事。兵無常形,水無常勢,觀其『』,從其『』,先讓自己『不可勝』── 敵打不敗也 ── 以待敵對者所給的『可勝』之『』。如果將兵法用於『軟體開發』,那個『敵對者』就是可能的各種『錯誤』 Bugs。因此對於『原型機』上所用的各個『裝置』以及開發『軟體』,都必須要先確定它們『工作正常』。『錯誤』是可敬的對手,這個『敵友』通常比我們更了解自己的吧,所以常能『打敗』我們!因而一個有智慧的人不只能從『自己』的『錯誤中學習』,也能從『他人』的『錯誤中學習』,記取教訓,『善補』思慮不周之『』,走上『不貳過』的大道。

軟體測試』 software testing 的典型定義是:在特定的環境條件下對指定『程式』進行『種種操作』,藉以發現『程式』的『錯誤』,用此衡量它的『軟體品質』,同時對其是否能夠滿足『設計要求』進行『評估』的一套整體程序。

通常人們認為『軟體測試』比『程式設計』簡單,這或許是誤解了『善攻者』之不易,以至於會有『通過測試』,上線後卻發現『程式』不管用之事。實際上『善守者』才容易是『善攻者』,他深知『攻其所必救』與『固其所難攻』之理。

BugsLifeWallpaper800

A Bug’s Life

82_P_1364427653119

─── 摘自《音樂播放器之 CD 轉成 mp3《三》上

 

為求更全面的『評估』 Michael Nielsen 先生首章首選派生程式 network.py 的『辨識率』之問題,我們需要『創想』一種『攻錯』之方法。心想何不就借用『子之矛、子之盾』的耶?

對人來說手寫阿拉伯數字『轉』個小角度,依然很容易辨讀,不知對那個小程式來說是否也如此的呢??於是乎使用

Image Module

The Image module provides a class with the same name which is used to represent a PIL image. The module also provides a number of factory functions, including functions to load images from files, and to create new images.

Examples

The following script loads an image, rotates it 45 degrees, and displays it using an external viewer (usually xv on Unix, and the paint program on Windows).

Open, rotate, and display an image (using the default viewer)

from PIL import Image
im = Image.open("bride.jpg")
im.rotate(45).show()

───

 

先來個『牛刀小試』︰

>>> from PIL import Image, ImageDraw
>>> im = Image.fromarray(img_5)
>>> imr15 = im.rotate(15,Image.BILINEAR )
>>> ima15 = network.np.asarray(imr15)
>>> plt.imshow(ima15,cmap='Greys', interpolation='nearest')
<matplotlib.image.AxesImage object at 0x5a4dcd0>
>>> plt.show()

 

Figure 5_r15

 

果然『辨識成功』的哩!

>>> net.feedforward(ima15)
>>> ima15c = ima15.reshape(784,1)
>>> net.feedforward(ima15c)
array([[  1.54467619e-07],
       [  1.54321744e-07],
       [  1.69959013e-10],
       [  2.03378588e-04],
       [  3.62250580e-06],
       [  5.89892288e-01],
       [  1.64095697e-09],
       [  9.64460480e-05],
       [  1.24254821e-06],
       [  1.58833585e-03]])
>>> network.np.argmax(net.feedforward(ima15c))
5
>>>

 

難道可以這樣一個一個的『驗證』的嗎??因此設想怎不借著

List comprehension

A list comprehension is a syntactic construct available in some programming languages for creating a list based on existing lists. It follows the form of the mathematical set-builder notation (set comprehension) as distinct from the use of map and filter functions.

───

 

翻轉整個『測試資料庫』的呢!這樣才有個『比較標準』的吧!!

>>> test_data_28x28 = [(item.reshape(28,28),dummy) for (item,dummy) in test_data]
>>> im_test_data = [(Image.fromarray(item),dummy) for (item,dummy) in test_data_28x28] 
>>> im_test_data_r15 = [(item.rotate(15,Image.BILINEAR ),dummy) for (item,dummy) in im_test_data]
>>> np_test_data_r15 = [(network.np.asarray(item),dummy) for (item,dummy) in im_test_data_r15]
>>> np_test_data_r15c = [(item.reshape(784,1), dummy) for (item,dummy) in np_test_data_r15]
>>> net.evaluate(test_data=np_test_data_r15c)
8548
>>>

 

AH!HA!! 結果從之前的 9499 / 10000 掉到了 8548 / 10000 ,還當真是給打了折扣的也???

 

 

 

 

 

 

 

 

 

 

 

 

 

W!o+ 的《小伶鼬工坊演義》︰神經網絡【MNIST】五

輪扁斲輪』說何事?書貴活讀,道通其意!

斲輪

莊子‧天道

世之所貴道者,書也。書不過語,語有貴也。語之所貴者,意也,意有所隨。意之所隨者,不可以言傳也,而世因貴言傳書。世雖貴之哉,猶不足貴也,為其貴非其 貴也。故視而可見者,形與色也;聽而可聞者,名與聲也。悲夫!世人以形色名聲為足以得彼之情。夫形色名聲,果不足以得彼之情,則知者不言,言者不知,而世 豈識之哉!

桓 公讀書於堂上,輪扁斲輪於堂下,釋椎鑿而上,問桓公曰:『敢問:公之所讀者,何言邪?』公曰:『聖人之言也。』曰:『聖人在乎?』公曰:『已死矣。』曰: 『然則君之所讀者,古人之糟魄已夫!』桓公曰:『寡人讀書,輪人安得議乎!有說則可,無說則死!』輪扁曰:『臣也以臣之事觀之。斲輪,徐則甘而不固,疾則 苦而不入,不徐不疾,得之於手而應於心,口不能言,有數存焉於其間。臣不能以喻臣之子,臣之子亦不能受之於臣,是以行年七十而老斲輪。古之人與其不可傳也 死矣,然則君之所讀者,古人之糟魄已夫!』

 

於是乎能『得手應心』耶??!!

因想起那個說『得心應手』的蘇軾有詩言︰

宋‧蘇軾《題西林壁》

橫看成嶺側成峰,
遠近高低各不同。
不識廬山真面目,
只緣身在此山中。

 

不知這個七十四行之小程式功夫修煉的如何哩?於是假

numpy.rot90

numpy.rot90(m, k=1)
Rotate an array by 90 degrees in the counter-clockwise direction.

The first two dimensions are rotated; therefore, the array must be at least 2-D.

Parameters:

m : array_like

Array of two or more dimensions.

k : integer

Number of times the array is rotated by 90 degrees.

Returns:

y : ndarray

Rotated array.

See also

fliplr
Flip an array horizontally.
flipud
Flip an array vertically.

───

 

測試一番。既是第五篇,就用五吧︰

>>> img_5 = training_data[0][0].reshape(28,28)
>>> plt.imshow(img_5,cmap='Greys', interpolation='nearest')
<matplotlib.image.AxesImage object at 0x5a76d90>
>>> plt.show()

 

Figure 5

 

【轉九十度】看成 0

>>> img_5r1 = network.np.rot90(img_5,1)
>>> plt.imshow(img_5r1,cmap='Greys', interpolation='nearest')
<matplotlib.image.AxesImage object at 0x552ea90>
>>> plt.show()
>>> img_5r1c = img_5r1.reshape(784,1)
>>> net.feedforward(img_5r1c)
array([[  9.48422668e-01],
       [  8.37509905e-10],
       [  6.24587095e-04],
       [  2.19023783e-10],
       [  5.85194584e-01],
       [  1.46136409e-11],
       [  1.81919304e-07],
       [  1.14141035e-06],
       [  1.71525730e-09],
       [  6.05105236e-03]])
>>> network.np.argmax(net.feedforward(img_5r1c))
0

 

Figure 5r1

 

【轉一百八十度】認作 5

>>> img_5r2 = network.np.rot90(img_5,2)
>>> plt.imshow(img_5r2,cmap='Greys', interpolation='nearest')
<matplotlib.image.AxesImage object at 0x5a71210>
>>> plt.show()
>>> img_5r2c = img_5r2.reshape(784,1)
>>> net.feedforward(img_5r2c)
array([[  4.19025498e-05],
       [  1.76313425e-05],
       [  3.55496816e-04],
       [  5.06004836e-06],
       [  1.39698665e-06],
       [  9.23738397e-01],
       [  6.00778782e-01],
       [  4.66450961e-11],
       [  6.11394572e-05],
       [  1.10825783e-12]])
>>> network.np.argmax(net.feedforward(img_5r2c))
5

 

Figure 5r2

 

【鏡裡觀象】以為 2

>>> img_5lr = network.np.fliplr(img_5)
>>> plt.imshow(img_5lr,cmap='Greys', interpolation='nearest')
<matplotlib.image.AxesImage object at 0x5a683d0>
>>> plt.show()
>>> img_5lrc = img_5lr.reshape(784,1)
>>> net.feedforward(img_5lrc)
array([[  4.82321281e-06],
       [  5.04183015e-06],
       [  9.69179259e-01],
       [  9.44724057e-03],
       [  4.64107830e-10],
       [  3.36075812e-06],
       [  1.55823494e-11],
       [  2.82510514e-06],
       [  2.71304177e-04],
       [  7.13868585e-10]])
>>> network.np.argmax(net.feedforward(img_5lrc))
2
>>> 

 

Figure 5lr

 

到底該說是好還是不好的呢???

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

W!o+ 的《小伶鼬工坊演義》︰神經網絡【MNIST】四

因想比較『辨識率』的差異,特用 PC 訓練 Michael Nielsen 先生之『network.py』,得到如下結果︰

Epoch 0: 9098 / 10000
Epoch 1: 9257 / 10000
Epoch 2: 9300 / 10000
Epoch 3: 9296 / 10000
Epoch 4: 9323 / 10000
Epoch 5: 9414 / 10000
Epoch 6: 9431 / 10000
Epoch 7: 9442 / 10000
Epoch 8: 9442 / 10000
Epoch 9: 9447 / 10000
Epoch 10: 9459 / 10000
Epoch 11: 9478 / 10000
Epoch 12: 9473 / 10000
Epoch 13: 9483 / 10000
Epoch 14: 9505 / 10000
Epoch 15: 9516 / 10000
Epoch 16: 9506 / 10000
Epoch 17: 9498 / 10000
Epoch 18: 9507 / 10000
Epoch 19: 9505 / 10000
Epoch 20: 9504 / 10000
Epoch 21: 9506 / 10000
Epoch 22: 9513 / 10000
Epoch 23: 9505 / 10000
Epoch 24: 9517 / 10000
Epoch 25: 9497 / 10000
Epoch 26: 9512 / 10000
Epoch 27: 9507 / 10000
Epoch 28: 9540 / 10000
Epoch 29: 9499 / 10000

 

再將此『腦』打包後,『移植』到樹莓派 3 上︰

>>> import mnist_loader
>>> training_data, validation_data, test_data = \
... mnist_loader.load_data_wrapper()
>>> import network
>>> net = network.Network([784, 30, 10])
>>> npzfile = network.np.load("swb.npz")
>>> npzfile.files
['s', 'b2', 'w2', 'w1', 'b1']
>>> net.weights[0] = npzfile["w1"]
>>> net.weights[1] = npzfile["w2"]
>>> net.biases[0] = npzfile["b1"]
>>> net.biases[1] = npzfile["b2"]
>>> net.evaluate(test_data=test_data)
9499
>>> net.feedforward(training_data[0][0])
array([[  3.25975452e-04],
       [  1.50559437e-07],
       [  1.12470024e-08],
       [  5.58044192e-02],
       [  8.82495098e-09],
       [  9.88381262e-01],
       [  1.39075949e-09],
       [  3.61043544e-08],
       [  3.45088788e-09],
       [  5.59930823e-08]])
>>> network.np.argmax(net.feedforward(training_data[0][0]))
5
>>>

 

果在意料之內耶!『辨識率』為 9499 / 10000 的乎!!

由於好奇那『腦』到底長怎樣的呢?心想何不就看看『weights』之圖象哩?

>>> net.weights[0].shape
(30, 784)
>>> net.weights[1].shape
(10, 30)
>>> import matplotlib.pyplot as plt
>>> img = net.weights[0]
>>> plt.imshow(img)
<matplotlib.image.AxesImage object at 0x552a790>
>>> plt.show()

 

Figure 1_w1

 

>>> img1 = net.weights[1]
>>> plt.imshow(img1)
<matplotlib.image.AxesImage object at 0x5a71a50>
>>> plt.show()

 

Figure 1_w2

 

當真『抽象』的狠也!!??對比之下畢卡索之名畫『格爾尼卡

PicassoGuernica

畢卡索名作《格爾尼卡》,1937年,收藏於馬德里索菲亞王后藝術中心

 

都顯得『太寫實』的嘞??!!

於是心思馳盪,想著『意識』可有『母語』?世界能否『溝通』?所謂『腦波傳意』到底所說何事啊???

PLOS ONE (originally PLoS ONE) is an open access peer-reviewed scientific journal published by the Public Library of Science (PLOS) since 2006. It covers primary research from any discipline within science and medicine. All submissions go through an internal and external pre-publication peer review, but are not excluded on the basis of lack of perceived importance or adherence to a scientific field. The PLOS ONE online platform employs a “publish first, judge later” methodology, with post-publication user discussion and rating features.

腦波記錄器

腦‧腦長距離意識交流

腦波訊息傳達

Experimental Set-Up

腦‧腦直接界面

EEG Set-Up

PLOS ONE』原稱 PLoS ONE 是一個開放使用的『同行評審』 peer-reviewed 之網路日誌,於二零零六年由『科學公眾圖書館』Public Library of Science 所發行。 PLOS ONE 之內容涵蓋『科學』與『醫藥學』的各種領域內的『基礎研究』。對於所有提交的文本,出版前會經過內外的『同行評審』後刊載,但是並不排斥那些覺得缺乏基本重要性或是與特定科學領域無涉的文章。它的線上平台憑藉著『讀者的討論與評等』之『出版』機制,對文本採取『先出版,後評價』的方法學。

今年八月十九日,PLOS ONE 上發表了一篇《Conscious Brain-to-Brain Communication in Humans Using Non-Invasive Technologies》文章,藉著新進發展的『腦機界面』 BCI brain-computer interfaces,以及剛出現的『非侵入式機腦界面』 nCBI non-invasive computer-brain interfaces,將 BCI 得到的『腦電波編碼』,透過網際網路傳送,而後於另一端『解碼』,探討長距離『』對『』的『意識傳達』與『意念交流』之『可能性』。據聞『實驗結果』錯誤率僅有百分之十五!其後同一組團隊於十一月五日,又發表了一篇《A Direct Brain-to-Brain Interface in Humans》文章,更進一步的證實了『人與人』之間『腦對腦』的『意念交流』的『可行性』!!

由於作者對於『腦電波』 EEG ElectroEncephaloGraphy 與『腦磁波』 MEG MagnetoEncephaloGraphic 的『原理』與『機制』了解十分有限,故於此無法多作評論。然而『傳遞』的既然是『電磁波』,依其所說又可以用『編碼』和『解碼』遠距離的在人與人之間『傳送』。這樣說來古人所講的至親間之『心電感應』以及《楞嚴經》所言的『甚深禪定』中所生之『六神通』 ── 神足通、天耳通、他心通、宿命通、天眼通、漏盡通 ── 也許就可能是真的了!!

─── 摘自《水的生命!!下上