プログラミングの芽

面白そうな技術を使って、楽しいことやりたい

pythonで画像データを見る

参考
OpenCV: Histograms - 1 : Find, Plot, Analyze !!!
前提
pythonによる画像処理 - あたりめ備忘録

plt.hist(img.ravel(),256,[0,256])
plt.show()

>>f:id:atarms:20190128182600p:plain

from scipy import misc

color = ("B", "G", "R")
for channel, col in enumerate(color):
    histr = cv2.calcHist([img], [channel], None, [256], [0, 256])
    plt.plot(histr, color=col)
    plt.xlim([0, 256])
plt.show()

>>f:id:atarms:20190128182524p:plain

Pythonによる単純パーセプトロンの実装

はじめに

 こんにちは、初めまして。

 今回は初めての記事ということで、ディープラーニングの礎ともなる考え方のパーセプトロンについて(私が)勉強していきたいと思います。
 下記の本を通読してます。

パーセプトロンとは

 パーセプトロンとは一般的に図1のようなモデルで表され、複数の入力信号(x_n)を受け取り1つの出力信号(y)を得るというものです。

f:id:atarms:20180811021012p:plain
図1.パーセプトロンのモデル

 式で表すと以下のようになります。


y=\begin{cases} &0\left( w_{1}x_{1}+w_{2}x_{2}\leqq \theta \right) \\\ &1\left( w_{1}x_{1}+w_{2}x_{2} >\theta \right) \end{cases}

一応Python3でと言っているのでPython3でも記述しときました。

def y(w1,x1,w2,x2,theta): #theta = θ
 tmp =  w1*x1+w2*x2
 if tmp <= theta:
  return 0
 elif tmp > theta:
  return 1

 x_n,yについては上記に述べた通りで、w_n各入力信号に対しての重みを表し、θはニューロンの発火(y=1を出力した時)しやすさ閾値(いきち)を表しています。
 重みwは入力信号ごとに与えてあげます、これはその信号の重要度を示すものとなり、アイドルユニットの中に推しが一人いたとすればその子の重みパラメータが他より高いみたいな感じです。 ?
 例として論理回路のANDゲートをパーセプトロンを使ってPython3で実装してみようと思います。  

パーセプトロンによるANDゲートの実装

 ANDゲートの真理値表を図2に示します。

f:id:atarms:20180811043445p:plain
図2.ANDの真理値表

 この真理値表からわかるように、x_1 , x_2が両方とも1の時y=1が出力されます。
 つまり閾値θはx_1 , x_2と重みw_1 , w_2の積和未満にしなければいけないことがわかります。
 この時取り得るパラメータはいくらでもありますが、ここでは図3のようにしたいと思います。

f:id:atarms:20180811070332p:plain
図3,入力データ(一例)
 これで上で示したプログラムを少し変えて実際にANDゲートの出力を見てみたいと思います。
 計算では(x_1 , x_2)を図2の入力とした時w_1x_1 + w_2x_2より図4のようになるはずです。
f:id:atarms:20180811071248p:plain
図4.出力予想

 プログラムは以下のものを使用します。

def AND(x1,x2):
    w1 = 0.5   
    w2 = 0.5    
    theta = 0.8 
    tmp = w1*x1+w2*x2
    if tmp <= theta:
        return 0
    elif tmp > theta:
        return 1
    
print(AND(0,0))
print(AND(1,0))
print(AND(0,1))
print(AND(1,1))

 このプログラムを実際にJupyter notebookやSpyderで実行すると図5のような結果が得られました。

f:id:atarms:20180811072120p:plain
図5.実行結果
 以上でパーセプトロンによるANDゲートの実装はできました。

ORやNANDは?

 NANDもORも同じようにしてあげることで実装できます。
 ここでは一例として入力パラメータと実行結果を図6、図7に示します。上のプログラムの2行目~4行目の部分を変えてあげれば問題なく動きます。

f:id:atarms:20180811074250p:plain
図6.ORゲート
f:id:atarms:20180811074006p:plain
図7.NANDゲート

他の論理ゲート

 TeXとかMarkdownとかいろいろ疲れたので加筆か次回書きます。
 NANDゲートだけでド・モルガンの法則を用いてしこしこ式変形していけばAND,OR,XOR...すべての論理ゲートを作ることが可能です。ただ単純パーセプトロンでは一層しかないという点で限界が見えてきます。

参考