不器用なエンジニア見習いのメモ

プログラミングなどのIT関連について学んだことをメモ代わりに書いていきます。 その他興味のあることについても書いていきます。 最近は機械学習に関することをまとめています。 HTML,JavaScript等を使って簡単なゲームを作成して公開しています。

2016年11月



先日の進捗報告で上げた課題の解決が出来ました。

ゲームはこちらから


具体的には
・各ページのスタート地点が固定化されていること。
・アイテムの所持されている状態などを各ページ間で引き継げないこと。

上記2点の改善を行いました。

直前のページの情報に基づいて現在のページ上でキャラクターがどのスタート地点にいるかが変わります。
アイテムに関しましては、アイテムを所持しているという情報(フラグ)を
セッションストレージに保存することでページが遷移しても情報を維持できる様にしました。

*ブラウザのバージョンによっては動作しない恐れがあります。

とりあえず、この課題がクリアされたんで大分ゲームらしいことが出来るかな。

 
 
参考書籍
『ゼロから作るDeep Learning Pythonで学ぶディープラーニングの理論と実践』
(2016年/著者:斎藤康毅/発行人:ティム・オライリー/発行所:株式会社オライリー・ジャパン)
 
前回の続きです。

 
・XORゲート
排他的論理和と言われる論理回路です。
x1またはx2のどちらかが1の時だけ出力が1になります。
 
pythonpic201611223or

 
また、XORゲートは次の配線で実現できます。


Screenshot from 2016-11-26 16:21:54



これを改めて真理値表で表すと以下のようになります。

Screenshot from 2016-11-26 15:56:57

 
実装すると以下の様になります。
これまで定義したAND、NAND、ORを使って実装できます。
 
 
def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y
 
XOR(0, 0)
XOR(1, 0)
XOR(0, 1)
XOR(1, 1)
 
 
ANDやORが単層のパーセプロトンと言い
XORは2層のパーセプロトン(多層)と言います。
 
 
下記の図のように、
2層のパーセプロトンでは、第0層と第1層のニューロンの間で
信号の送受信が行われています。
 
Screenshot from 2016-11-26 16:00:09



次に、第1層と第2層の間で信号の送受信が行われます。
詳しくまとめると以下の通りです。
 
1.第0層の2つのニューロンが入力信号を受け取り、第1層のニューロンへ信号を送る
2.第1層のニューロンが第2層のニューロンへ信号を送り、第2層目の入力はyを出力する
 

パーセプロトンは層を重ねることでより多くの表現を可能にしています。
 
 
続きは次回です。


今週気になったニュースです。

 参考記事
『最大深さ7センチ、福岡市「沈下は想定内」』(2016.11.26 毎日新聞:http://mainichi.jp/articles/20161126/k00/00e/040/213000c)


今月8日い大規模陥没事故があった現場で、事故後に埋め戻された場所に最大7センチメートルの沈下が確認されました。

沈下が確認されたのは26日午前1時40分頃、約4時間後の午前5時半ごろに通行規制が解除されてます。


けが人の発生は無く、電気ガスなどに影響も無いことから現時点では早急な対応が取られることは無いと考えれます。
福岡市は埋め戻し後も沈下の可能性があるとして定期的に調査を実施していたそうです。
福岡市の見解では「8センチメートル」以内の沈下なら問題とのことです。

一部とはいえ、7センチって言うギリギリの長さまで沈下しているのでもう少し重く見たような。記事をぱっと見た感じだとあまり深刻な事態ではないと報告しているみたいだけど本当に大丈夫なのでしょうか?

午前0時半ごろに約1.5センチメートルの沈下が確認され、その後午前2時40分頃には最大7センチに達し、その後変化が見られなかったとのことですがそれでOKとして良いものか……。

埋め立て作業上起こりうることだと言っても、これを公に報告していなかったっていうのはやはり近隣の人には受け入れがたいことのようです。
営業の計画などを考慮すると予めこうなること、調査が定期的に行われていることがわかっていればそれなりの対策が出来るというものです。


せっかく事故後の迅速な対応が評判良かったのにここで報告・連絡を怠っていたのはなんと言うか勿体無い。





参考書籍
『ゼロから作るDeep Learning Pythonで学ぶディープラーニングの理論と実践』
(2016年/著者:斎藤康毅/発行人:ティム・オライリー/発行所:株式会社オライリー・ジャパン)
 
前回の続きです。
 
 
パーセプロトンのを語る上で欠かせない基本的は論理回路についてまとめていきます。
 
 
・ANDゲート
両方共1の時に、1を出力
 
pythonpic201611221and
 

・NANDゲート
どちらか一方でも0があったら1を出力

pythonpic201611222nand
 
 
・ORゲート
どちらか一方でも1があったら1を出力
 
pythonpic201611223or
 
 
★パーセプロトンの実装
 
 
AND関数を定義していきます。
パラメータw1,w2,thetaは関数内で初期化し、重み付き入力の想話が1を超えると1を返し、それ以外は0を返します。
*変数a,b,c,dは出力用の変数です。演算には一切関係はありません。
 
 
def AND(x1, x2):
    w1, w2, theta = 0.5, 0.5, 0.7
    tmp = x1*w1 + x2*w2
    if tmp <= theta:
        return 0
    elif tmp > theta:
        return 1
 
a = AND(0, 0)
b = AND(1, 0)
c = AND(0, 1)
d = AND(1, 1)
 
print(a)
print(b)
print(c)
print(d)
 
 
出力結果
C:\\PythonPJ\\sample20161106>python AND.py
0
0
0
1
 
AND演算ができています。
 
 
NANDなどのプログラムを書く前に、
「重み」と「バイアス」についてまとめます。
 
パーセプロトンでは、入力信号に重みが乗算された値とバイアスの和が計算され、
その値が0を上回れば1を出力し、
そうでなければ0を出力するようになっています。
 
*「バイアス」は出力信号が1を出力する度合いを調整するパラメータとして機能します。
 
 
NumPyで実装すると以下の様になります。
 
 
>>> import numpy as np
>>> x = np.array([0, 1])
>>> w = np.array([0.5, 0.5])
>>> b = -0.7
>>> w*x
array([ 0. ,  0.5])
>>> np.sum(w*x)
0.5
>>> np.sum(w*x) + b
-0.19999999999999996
 
*x,w,bはそれぞれ入力、重み、バイアスを示します。
 
★重みとバイアスの導入
先ほどのAND関数の実装を「重み」と「バイアス」を用いて行なって効率的に演算していきます。
 
 
import numpy as np
 
def AND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1
 
a = AND(0, 0)
b = AND(1, 0)
c = AND(0, 1)
d = AND(1, 1)
 
print(a)
print(b)
print(c)
print(d)
 
 
C:\\PythonPJ\\sample20161106>python ANDBias.py
0
0
0
1
 
次にNANDゲートとORゲートを実装します。
 
 
 
import numpy as np
 
def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])
    b = 0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1
 
a = NAND(0, 0)
b = NAND(1, 0)
c = NAND(0, 1)
d = NAND(1, 1)
 
print(a)
print(b)
print(c)
print(d)
 
 
def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.2
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1
 
a = NAND(0, 0)
b = NAND(1, 0)
c = NAND(0, 1)
d = NAND(1, 1)
 
print(a)
print(b)
print(c)
print(d)
 
 
 
 
 
AND、NAND、ORは同じ構造のパーセプロトンであり、違いは重みとパラメータの値だけです。
 
 
続きは次回です。


今週気になったニュースです。

 参考記事
『老後の貧困で取り返しがつかなくなる前に知っておきたいこと』(2016.11.20 Zuu online:https://zuuonline.com/archives/128728)


週が変わってしまいましたが先週分の記事という事で……


今回はコラム的なものについて



確かにここ1,2年ぐらいから老後になってからの貧困が取り上げられてきている様に感じます。

毎年年金を払い続け、65歳まで定年で働くということが一定のルートのように思われてきて居たのですがそれが通じなくなってきているようです。

原因の一つに一人っ子が増えたからという記述を見ましたがここの部分に関しては?が。
実家に戻ってきた子どもの世話することへの負担は一人っ子であろうとなかろうと関係ない気がする。

兄弟等がいればコミュニケーションのとり方次第で実家へ戻ることを抑制出来るという見方なのでしょうか。
自分にも兄弟がいるのでなんとなくわかる気がする。

「投資」の候補として「投資信託」が真先に上げられているのが以外だったな。
比較的リスクが少ないかぁ。
はっきりと覚えていないけど過去に見た
金融商品のトラブルに関する記事には大体これが出ていたんだけど……
要は使い方なんだろうけど。
詳しく調べる必要があるな。



最終的に「孤独」にならないことが大きな鍵を握るのは凄い同意する。
ちょっと体調崩していたけどTLのおかげで救われました。
本当にありがとうございました。




↑このページのトップヘ