2018年5月3日 星期四

APCS大學程式設計先修檢測_歷屆試題解答


APCS大學程式設計先修檢測
歷屆試題解答

會看程式不代表會寫程式

根據<教育部扎根高中職資訊科學教育計畫>105年3月APCS檢測結果,程式設計實作題共4題,只要能寫一題以上就排到前11%,這代表會"看"程式的人多,能實際寫code的人少。因此,艾鍗特邀業界工程師Joseph,用軟體工程師角度重新教你認識程式、理解程式,用100分鐘內思考問題、解決問題,完成程式。

APCS實作題成績分級



選擇題高分只能說是會""程式,但並不代表會""程式。所以實作題才是APCS真的挑戰。試著閱讀下列106年APCS程式設計實作題,在沒有人解釋題目與對題目進行解構前,是否已掌握到要解什麼問題嗎?你想到解法了嗎? 


APCS歷屆試題解析

106年10月28日APCS程式設計實作題 Part 1


106年10月28日APCS程式設計實作題 Part 2


106年3月4日APCS程式設計實作題 Part 1



APCS高效解題技巧

1) 能理解題目到底要解什麼問題
2) 能在紙上推演邏輯求解或找到關係式

3) 能快速規劃出程式基本方塊(架構)

4) 能動手coding


<我想了解更多>




2018年4月13日 星期五

Convolution 的意義


Convolution 的意義
The convolution of f and g is written fg, using an asterisk or star. It is defined as the integral of the product of the two functions after one is reversed and shifted. As such, it is a particular kind of integral transform:



Convolution3.svg


隨著不同的 t 值, 對f和g函數相乘的積分(求重疊時的面積)...


Convolution of box signal with itself2.gif


Convolution of spiky function with box2.gif




https://goo.gl/EcCcj7


2018年4月11日 星期三

高斯模糊

常態分配


# 一維的常態分配為, 為一個鐘型分佈曲線, 中間高, 兩旁低

常態分布normal distribution)又名 高斯分布(Gaussian distribution)


若隨機變數X服從一個位置參數為μ、尺度參數為σ的常態分布,記為:

X~N(μ,σ²)

μ決定中心點位 置, 而其變異數σ²的開平方或標準差σ決定了資料分散的程度。

「常態分配」的圖片搜尋結果


# 二維的常態分配為一個等高線圖是從中心開始呈常態分布的同心圓中間點最高而離中間點愈遠值愈低


高斯模糊

高斯模糊的原理它是一種資料平滑技術(data smoothing),它用常態分布計算圖像中每個像素的變換。適用於多個場合,影像處理恰好提供了一個直觀的應用實例。

糊方法就是讓圖像中的每一個Pixel的值, 變成取其"周圍點"的平均值。若周圍的範圍愈大,則會模糊的程度會愈強。在數值上,這是一種"平滑化"。而在圖形上,就相當於產生"模糊"效果,使原始Pixel失去細節。


如果使用簡單平均,顯然不是很合理,因為圖像都是連續的,越靠近的點關係越密切,越遠離的點關係越疏遠。因此,採用加權平均更合理,距離越近的點權重越大,距離越遠的點權重越小。那分配權重的方式是什麼? 可以採用"常態分配"來配置權重。愈近的pixel 權重愈高,愈遠的pixel 權重愈低。

高斯矩陣

這是一個計算σ = 0.84089642的高斯分布生成的範例矩陣。注意中心元素 (4,4)處有最大值,權重隨著距離中心越遠數值對稱地減小。
0.000000670.000022920.000191170.000387710.000191170.000022920.00000067
0.000022920.000786330.006559650.013303730.006559650.000786330.00002292
0.000191170.006559650.054721570.110981640.054721570.006559650.00019117
0.000387710.013303730.110981640.225083520.110981640.013303730.00038771
0.000191170.006559650.054721570.110981640.054721570.006559650.00019117
0.000022920.000786330.006559650.013303730.006559650.000786330.00002292
0.000000670.000022920.000191170.000387710.000191170.000022920.00000067
注意中心處的0.22508352比3σ外的0.00019117大1177倍。

上述矩陣總和為1,即代表各權重位置的佔比。將原始影像中每一個pixel 乘上此高斯矩陣並加總,即為新的pixel值。

如果是彩色的, 則RGB 3個channel 都做同樣的高斯模糊動作



圖1:原始圖像 圖2:經過高斯模糊處理的圖像







https://goo.gl/EcCcj7

2018年3月16日 星期五

機器學習(Machine Learning)與深度學習(Deep Learning)



什麼是機器學習(Machine Learning)?


機器學習是人工智慧的其中一個分支,簡單來說它就是讓機器可以像人一樣,可藉由閱讀大量的資料建立規則而具有知識,而機器學習就是透過演算法來分析數據、從中學習來判斷或預測現實世界裡的某些事(專家其實是訓練有素的狗,機器學習大概就是這個味道) 。閱讀已知的大量資料就是所謂訓練的過程,透過足夠多的Training Data 建立出一個 Model (最佳函式), 這個Model 就是"機器的知識",之後你可以餵未知的資料給機器,機器就能進行預測或判斷 。機器學習並非手動事先用程式撰寫好指令規則來判斷,而是使用大量的數據和演算法來「訓練」機器,自動產生規則自動判斷或預測。

什麼是類神經網路?

類神經網路是機器學習領域中的一種方法,它企圖用模擬人類大腦中的神經網路(Neural Network)的運作方式來建構機器學習的Model。例如,眼睛看到車快撞上來了,人的反應會立刻跳開,這中間可能經過大腦無數個神經元的運算及傳導,至今人類可能都還搞不清楚大腦怎麼辦到的,因為中間過程太複雜,但從頭尾結果來看卻很簡單, 就是看到車要撞到了,人會閃。Neural Network 概念,其實正是如此,一堆資料X 而每筆資料有多個特徵值(x1,x2,x3,x4),NN中每一層的權重W就可以決定出最終的 Y (y1,y2,y3)。若中間可能有很多層,很多層就叫做 MLP(Multi-Layer Perceptron)。當層級愈多網路就愈大, 所需的參數W就要愈多,因此計算Gradient 就要花更多的時間。



什麼是深度學習(Deep Learning)?

它其實就是很深的Neural Network (Deep Neural Network DNN), 就是中間Hidden Layer 有很多層級。AlexNet 達到8層級, ResNet已達到100多個層級。每建構一個Hidden Layer就代表建立同款式但有著不同花樣的過濾器(Filter)/篩子,以篩出不同的特徵。愈多的Hidden Layer 就代表用了更多款式的篩子。經過Back Propagation 計算後,求得每一個款式下不同花樣的權重W。而愈重要的篩子權重愈高,愈不重要的篩子權重就會愈低。 這些W權重較大的篩子,代表用這些篩子可以篩出 X-->Y的重要成份,也就是"特徵"。這也就是深度學習最強的地方--自動特徵擷取,而不是由人來先定義好特徵。

如何建構深度學習中的網路模型則是Deep Learning 的核心技術。 針對影像處裡的 CNN卷積神經網路(Convolution Neuron Networks) , 網路中加入Convolution及pooling 層以抽取特徵,而將能將圖片進行分類預測。RNN (Recurrent Neural Networks)主要用於文字語意處理,可以用來判斷前後文而使機器能理解一句話的意思。

機器學習或深度學習的技術可以應用在哪?

機器學習的演算法已廣泛應用於資料探勘、電腦視覺、自然語言處理、語音和手寫識別、生物特徵識別、DNA序列測、搜尋引擎、醫學診斷、金融數據分析與證券市場分析等方面。所以幾乎各行各業,包含金融業、零售業、製造業、醫療產業等,都會用到機器學習的技術。而以深度學習作為機器學習的方法,則多用在電腦視覺(Computer Vision)、ASR語音識別 (Automatic Speech Recognition)、NLP(自然語言處理),這種比較沒有因果關係或者連人類都很難解釋的邏輯推理。



===================================
深度學習的Hello World:  "MNIST" 手寫數字辨識

簡單說明Artifical Neural Network 基本流程, 當然也可以Deep Learning 的CNN (Constitutional Neural Network )實作它, 你就對CNN有更進一步的認識


step: training data 將每一個手寫數字轉成pixel vector, 作為input X , 每個pixel 作為feature 




建立Network Model (網路參數.....)


以手寫數字"6" 示意在input layer 的態度


 訓練好Model 後, 對testing data 進行predict, 能將手寫的0~9數字Label出對應的 0~9. 然後比較正確率(Accuracy) 
當正確率不足, 如何修改網路參數以提高正確率...正是學問之所在? 在kaggle 上目前有6萬多筆的手寫數字, 其正確率是100%......

https://goo.gl/EcCcj7



2018年2月28日 星期三

CAP 定理 與 NoSQL




NoSQL是對不同於傳統的關聯式資料庫資料庫管理系統的統稱。

兩者存在許多顯著的不同點,其中最重要的是


  1. NoSQL不使用SQL作為查詢語言
  2. 資料存儲可以不需要固定的表格模式 (Schema)
  3. 經常會避免使用SQL的JOIN操作,一般有水平可延伸性的特徵。

不同於RDMBS 的ACID特點,NoSQL的結構通常提供弱一致性的保證 ,如最終一致性,或交易僅限於單個的資料項。




CAP 定理 與 NoSQL 套件對照表

CAP 定理 可參考下述文件:
CAP theorem (CAP定理), 下述摘錄自此兩篇:
在 理論計算機科學中, CAP定理(CAP theorem), 又被稱作 布魯爾定理(Brewer's theorem), 它指出對於一個 分布式計算系統 來說,不可能同時滿足以下三點:
  • Consistency: 一致性 (所有節點在同一時間具有相同的數據) (all nodes see the same data at the same time)
  • Availability: 可用性 (保證每個請求不管成功或者失敗都有響應) (a guarantee that every request receives a response about whether it was successful or failed)
  • Partition tolerance: 分隔容忍 (系統中任意信息的丟失或失敗不會影響系統的繼續運作) (the system continues to operate despite arbitrary message loss or failure of part of the system)
根據定理,分佈式系統只能滿足三項中的兩項而不可能滿足全部三項。
因為 CAP 三者無法同時達成, 所以 NoSQL 套件目前都是符合其中兩項, 另外一項支援度就會差一點, 下述文章有整理目前 NoSQL 的資料庫, 對應 CAP 定理 的整理.
BASE理論
BASE理論是CAP理論結合實際的產物。 BASE(Basically Available, Soft-state,Eventually consistent) BASE恰好和ACID是相對的,BASE要求犧牲高一致性,獲得可用性或可靠性
References:
https://blog.longwin.com.tw/2013/03/nosql-db-choose-cap-theorem-2013/


https://goo.gl/EcCcj7


https://goo.gl/dcdPPA


2018年2月26日 星期一

ARM Alignment



On ARM-based systems you cannot address a 32-bit word that is not aligned to a 4-byte boundary 


LDR r0, = 0x1001
LDR r1, [r0]
The second line in the above code will give hard fault since are trying to read 4 bytes but the memory address is not divisible by 4
If we change the second line in above code to the following
LDRB r1, [r0];//Load 1 byte from address
The above line will not produce a hard fault, since we are trying to access 1 byte(1 byte can be accessed from any memory location)
Also notice the following example;
LDR r0,= 0x1002
LDRH r1,[r0];   //Load half word from 0x1002


References:





2018年2月22日 星期四

SIGFOX 連線&傳送教學





Serial (UART) Parameters:9600 baud, no parity, 8 data bit and 1 stop bit
依序輸入指令,建議使用putty連線
AT // will return OK if not, check Arduino UART, board communition or change Terminal app
AT$GI? //will return X,Y, If X=0 or Y<3
AT$RC
AT$SF= xxxxxxxxxxxx //it's what you want to send

This procedure will force the module to send the frame within the macro channel listened by SIGFOX network.