def relu_prime(z): z[z < 0] = 0 z[z > 0] = 1 return z def loss(y_true, y_pred): return 0.5 * (y_pred - y_true)**2 def loss_prime(y_true, y_pred): return y_pred - y_true x_train = np.array([[[0, 0]], [[0, 1]], [[1, 0]], [[1, 1]]]) y_train = np.array([[[0]], [[1]], [[1]], [[0]]]) net = Network() net.add(FCLayer((1, 2), (1, 3))) net.add(ActivationLayer((1, 3), (1, 3), relu, relu_prime)) net.add(FCLayer((1, 3), (1, 1))) net.add(ActivationLayer((1, 3), (1, 3), relu, relu_prime)) net.setup_loss(loss, loss_prime) net.fit(x_train, y_train, epochs=1000, learning_rate=0.01) out = net.predict([[0, 1]]) print(out)
class myFrame(wx.Frame): def __init__(self, parent, title, required_fps): # フレームの初期化 # 画面サイズの変更を禁止(レイアウトが崩れることを防ぐため) wx.Frame.__init__(self, parent, title=title, size=(1085, 1000), style=wx.MINIMIZE_BOX | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX) # カメラから取得した映像を表示する入れ物 # 初期化時にNullBitmapを表示 self.item = wx.StaticBitmap(self, bitmap=wx.NullBitmap, size=wx.Size(640, 480)) # 撮影ボタンを押した際にカメラから取得した画像を表示する入れ物 # 初期化時にNullBitmapを表示 self.capture = wx.StaticBitmap(self, bitmap=wx.NullBitmap, size=wx.Size(640, 480)) # 撮影ボタン self.photo_button = wx.Button(self, label="撮影") # モデルが予測したクラス名を表示する入れ物 self.txt = wx.StaticText(self, -1, "", size=wx.Size(400, 30), style=wx.TE_CENTER) # テキストのフォントとフォントサイズを指定 font = wx.Font(40, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL) # テキストのフォントを先ほど指定したものにする self.txt.SetFont(font) # カメラ self.camera = Camera(0) # ネットワーク self.network = Network() # 映像の表示にタイマーを使用 self.timer = wx.Timer(self) # ボタンクリックとOnButtonをバインド self.Bind(wx.EVT_BUTTON, self.OnButton) # timerによる時間経過とOnTimerをバインド self.Bind(wx.EVT_TIMER, self.OnTimer) # 画面を2×2に分割 sizer = wx.GridSizer(2, 2, 2, 215) # カメラによる映像を配置 sizer.Add(self.item) # ボタンを配置 sizer.Add(self.photo_button, flag=wx.GROW) # 撮影ボタンを押した際にカメラから取得する画像を表示する部分を配置 sizer.Add(self.capture) # テキストを配置 sizer.Add(self.txt, flag=wx.ALIGN_CENTER) # タイマーによる実行間隔の指定 # ms単位で指定するため1000÷(目標fps)の商(小数点以下切り捨て)を待ち時間とする wait = 1000 // required_fps # タイマーをスタートする self.timer.Start(wait) # 画面分割を設定 # sizerによる分割指定及び配置 self.SetSizer(sizer) # タイマーの消費ごとに実行される関数 def OnTimer(self, event): # カメラ画像の取得 ret, capture = self.camera.get_frame() # カメラから画像が取得されている場合のみ実行 if ret: # openCVで読み込んだ画像はBGRの順になっているためRGBの順に変換 capture = cv2.cvtColor(capture, cv2.COLOR_BGR2RGB) # 画像をビットマップ形式に変換 bmp = wx.Bitmap.FromBuffer(capture.shape[1], capture.shape[0], capture) # 画面に表示 self.item.SetBitmap(bmp) else: print("NULL!!!") # ボタンが押された際に実行される関数 def OnButton(self, event): # カメラ画像の取得 ret, capture = self.camera.get_frame() # カメラから画像が取得されている場合のみ実行 if ret: # 画面中央を正方形に切り取り cropped = crop_center(capture) # 切り取り後の画像を保存 cv2.imwrite("./img/capture/cap.png", cropped) # 切り取り前の画像をBGRからRGBに変換 capture = cv2.cvtColor(capture, cv2.COLOR_BGR2RGB) # 画像をビットマップ形式に変換 bmp = wx.Bitmap.FromBuffer(capture.shape[1], capture.shape[0], capture) # 画面に表示 self.capture.SetBitmap(bmp) # 予測結果を得る pred = self.network.predict() # 予測結果を画面に表示 self.txt.SetLabel(pred)
def relu_func_prime(z): z[z < 0] = 0 z[z > 0] = 1 return z def cost_func(y_true, y_pred): return 0.5 * (y_pred - y_true)**2 def cost_func_prime(y_true, y_pred): return y_pred - y_true x_train = np.array([[[0, 0]], [[0, 1]], [[1, 0]], [[1, 1]]]) y_train = np.array([[[0]], [[1]], [[1]], [[0]]]) network = Network() network.add(FCLayer((1, 2), (1, 3))) network.add(ALayer((1, 3), (1, 3), relu_func, relu_func_prime)) network.add(FCLayer((1, 3), (1, 1))) network.add(ALayer((1, 1), (1, 1), relu_func, relu_func_prime)) network.setup_cost_func(cost_func, cost_func_prime) network.train(x_train, y_train, epochs=1000, learning_rate=0.01) out = network.predict([[0, 1]]) print(out)
from network.network_improved import NetworkImproved training_data, validation_data, test_data = data_loader.load_data() # Train network print('Which network do you want to train?') print('1. Basic network') print('2. Network improved') n = int(input()) if n == 1: my_network = Network((784, 50, 10)) my_network.train(*training_data, 3.0, 30, 10) elif n == 2: my_network = NetworkImproved((784, 50, 10)) my_network.setAttribs(l2_norm = True) my_network.train(*training_data, 0.5, 30, 10) # Test network correct, tot = 0, len(test_data[0]) for data, label in zip(*test_data): h, ans = np.argmax(my_network.predict(data)), np.argmax(label) if h == ans: correct += 1 print('Correctness: %d/%d = %.2f%%' % (correct, tot, correct/tot*100)) # Store network in json file f = open('json.js', 'w') f.write('let json = ' + my_network.get_json() + ';') f.close()