0. 前言

本文翻译自博客:
iamtrask.github.io ,这次翻译已经获得trask本人的同意与支持,在此特别感谢trask。本文属于作者一边学习一边翻译的作品,所以在用词、理论方面难免会出现很多错误,假如您发现错误或者不合适的地方,可以给我留言,谢谢!

1. 概要

我的最佳学习法就是通过玩具代码,一边调试一边学习理论。这篇博客通过一个非常简单的python玩具代码来讲解递归神经网络。

那么依旧是废话少说,放‘码’过来!

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 import copy, numpy as npnp.random.seed(0) # compute sigmoid nonlinearitydef sigmoid(x):    output = 1/(1+np.exp(x))    return output # convert output of sigmoid function to its derivativedef sigmoid_output_to_derivative(output):    return output*(1output) # training dataset generationint2binary = {}binary_dim = 8 largest_number = pow(2,binary_dim)binary = np.unpackbits(    np.array([range(largest_number)],dtype=np.uint8).T,axis=1)for i in range(largest_number):    int2binary[i] = binary[i] # input variablesalpha = 0.1input_dim = 2hidden_dim = 16output_dim = 1 # initialize neural network weightssynapse_0 = 2*np.random.random((input_dim,hidden_dim)) 1synapse_1 = 2*np.random.random((hidden_dim,output_dim)) 1synapse_h = 2*np.random.random((hidden_dim,hidden_dim)) 1 synapse_0_update = np.zeros_like(synapse_0)synapse_1_update = np.zeros_like(synapse_1)synapse_h_update = np.zeros_like(synapse_h) # training logicfor j in range(10000):     # generate a simple addition problem (a + b = c)    a_int = np.random.randint(largest_number/2) # int version    a = int2binary[a_int] # binary encoding     b_int = np.random.randint(largest_number/2) # int version    b = int2binary[b_int] # binary encoding     # true answer    c_int = a_int +b1a2e06692843524-48\”>    # true answer    c_int = a_int +者不合适的地方,可以给我留言,谢谢!

1. 概要

我的最佳学习法就是通过玩具代码,一边调试一边学习理论。这篇博客通过一个非常简单的python玩具代码来讲解递归神经网络。

那么依旧是废话少说,放‘码’过来!

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 import copy, numpy as npnp.random.seed(0) # compute sigmoid nonlinearitydef sigmoid(x):    output = 1/(1+np.exp(x))    return output # convert output of sigmoid function to its derivativedef sigmoid_output_to_derivative(output):    return output*(1output) # training dataset generationint2binary = {}binary_dim = 8 largest_number = pow(2,binary_dim)binary = np.unpackbits(    np.array([range(largest_number)],dtype=np.uint8).T,axis=1)for i in range(largest_number):    int2binary[i] = binary[i] # input variablesalpha = 0.1input_dim = 2hidden_dim = 16output_dim = 1 # initialize neural network weightssynapse_0 = 2*np.random.random((input_dim,hidden_dim)) 1synapse_1 = 2*np.random.random((hidden_dim,output_dim)) 1synapse_h = 2*np.random.random((hidden_dim,hidden_dim)) 1 synapse_0_update = np.zeros_like(synapse_0)synapse_1_update = np.zeros_like(synapse_1)synapse_h_update = np.zeros_like(synapse_h) # training logicfor j in range(10000):     # generate a simple addition problem (a + b = c)    a_int = np.random.randint(largest_number/2) # int version    a = int2binary[a_int] # binary encoding     b_int = np.random.randint(largest_number/2) # int version    b = int2binary[b_int] # binary encoding     # true answer    c_int = a_int +pan> b_int