1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | # ´º·ÐÀÇ Ãâ·Â °è»ê ÇÔ¼ö def calculate(input): global weights global bias activation = bias # ¹ÙÀ̾ for i in range(2): # ÀԷ½ÅÈ£ ÃÑÇÕ °è»ê activation += weights[i] * input[i] if activation >= 0.0: # ½ºÅÜ È°¼ºÈ ÇÔ¼ö return 1.0 else: return 0.0 # ÇнÀ ¾Ë°í¸®Áò def train_weights(X, y, l_rate, n_epoch): global weights global bias for epoch in range(n_epoch): # ¿¡Æ÷Å© ¹Ýº¹ sum_error = 0.0 for row, target in zip(X, y): # µ¥ÀÌÅͼÂÀ» ¹Ýº¹ actual = calculate(row) # ½ÇÁ¦ Ãâ·Â °è»ê error = target - actual # ½ÇÁ¦ Ãâ·Â °è»ê bias = bias + l_rate * error sum_error += error**2 # ¿À·ùÀÇ Á¦°ö °è»ê for i in range(2): # °¡ÁßÄ¡ º¯°æ weights[i] = weights[i] + l_rate * error * row[i] print(weights, bias) print('¿¡Æ÷Å© ¹øÈ£=%d, ÇнÀ·ü=%.3f, ¿À·ù=%.3f' % (epoch, l_rate, sum_error)) return weights # XOR ¿¬»ê ÇнÀ µ¥ÀÌÅͼ # »ùÇðú ·¹À̺íÀÌ´Ù. X = [[0,0],[0,1],[1,0],[1,1]] y = [0, 1, 1, 0] weights = [0.0, 0.0] bias = 0.0 l_rate = 0.1 # ÇнÀ·ü n_epoch = 100 # ¿¡Æ÷Å© Ƚ¼ö weights = train_weights(X, y, l_rate, n_epoch) print(weights, bias) | cs |