院長の脳の機能が信号機なら、まだ青のうちに解決しておかなければならない問題がある。
というのは本では20回程度の試行で安定した値が得られている一方、このコードではだいたい250回ぐらいで得られている。
およそ10倍の回数が必要なのだ。
とすれば、10倍緻密なことをやっているか、10倍おろかなことをやっているか、のどちらかになる。
実は重みの取り方は慎重にするべきだと述べられているのだが、その具体的なやり方には言及されていない。
そこで PPのときはいづれかが違うのでそれにーを、FFのときはFであるべきではない方に+を、PFで正しいときはなにもせず、反対の時はそれぞれに+かーに見合った重みをつけてみたのだが、果たしてそれでよかったのだろうか。
まず慎重にしているのかおろかなことをしているのか決着をつける必要がありそうだ。
そして「この先が興味深い」と筆者が語るように、重みが得られた入力で、実際にどれくらいの色の変化に対応できるのかにもトライする必要がある。
たとえば”くすんだ赤”を (50,0,0)で表したとき、どうなるか。
ということでいろいろやってみると・・・
あれれれれ?
import random
import numpy as np
colors = {"red": (100, 0, 0), "yellow": (100, 100, 0), "blue": (0, 100, 50)}
stop_synapses = {}
go_synapses = {}
stop_synapses = {‘Rs’: 6, ‘Gs’: -5, ‘Bs’: 5}
go_synapses = {‘Rg’: 0, ‘Gg’: -3, ‘Bg’: 7}
# stop_synapses = {‘Rs’: -3, ‘Gs’: 2, ‘Bs’: 6}
# go_synapses = {‘Rg’: 1, ‘Gg’: 1, ‘Bg’: -2}
def compute_signals(color):
R, G, B = colors[color]
stop_signal = stop_synapses["Rs"] * R + stop_synapses["Gs"] * G + stop_synapses["Bs"] * B
go_signal = go_synapses["Rg"] * R + go_synapses["Gg"] * G + go_synapses["Bg"] * B
return stop_signal >= 1, go_signal >= 1
print(" stop : go")
print("red :",compute_signals(‘red’))
print("yellow :",compute_signals(‘yellow’))
print("blue :",compute_signals(‘blue’))
上がチェック用のコードで院長コードは正常動作しているが、おや、赤、黄、青を認識しない重みが出てくる場合があるぞ。
(ちなみにコメントアウトしているのは本のコードの重み)
えーと、えーと、・・・分からない。
すでに院長の頭の信号機は黄色が点滅し始めている。果たして赤になる前に横断歩道を渡り切れるか!