【发布时间】:2018-01-20 19:09:08
【问题描述】:
我遇到了一个简单的神经网络问题。我有稀疏向量作为代表电影评论的输入。我使用 sklearn 的 CountVectorizer 生成了这些向量。每个向量的大小为 5000。
经过几次迭代(取决于我使用了多少评论),我收到警告:
在 np.exp 中遇到溢出,这是我的 sigmoid 函数的一部分。
几次迭代后,神经网络卡住并始终产生相同的错误值
我发现,np.exp-warning 是由前向传播中 syn1 和 l1 相乘后的大值引起的。
我试图标准化网络不同层的值,但随后
几次迭代后它又卡住了。
谁能帮助我并告诉我我的代码有什么问题?
感谢您的关注。
def sigmoid(x):
output = 1 / ( 1 + np.exp( -x ) )
return output
def sigmoid_output_to_derivate(x):
return x * ( 1 - x )
if __name__ == "__main__":
with open("train_data_20.pkl", "rb") as fid:
train_data_features = pickle.load( fid )
with open("train_labels_20.pkl", "rb") as fid_train:
train_labels = pickle.load( fid_train )
with open("test_data_20.pkl", "rb") as fid_test:
test_data_features = pickle.load( fid_test )
with open("test_labels_20.pkl","rb") as fid_l:
test_labels = pickle.load( fid_l )
x = train_data_features[:2500]
y = np.reshape( train_labels[:2500], (-1,1))
np.random.seed(1)
syn0 = 2*np.random.random((5000,6000))-1
syn1 = 2*np.random.random((6000,1))-1
for i in range(1000):
l0 = x
#l0 = l0 / np.linalg.norm(l0)
l1 = sigmoid( np.dot(l0,syn0) )
l2 = sigmoid( np.dot(l1,syn1) )
l2_error = y - l2
error_mean = np.mean( np.abs( l2_error ) )
print( "Error: ", str(error_mean ))
l2_delta = l2_error * sigmoid_output_to_derivate(l2)
l1_error = np.dot(l2_delta, syn1.T )
l1_delta = l1_error * sigmoid_output_to_derivate(l1)
syn1 += np.dot( l1.T, l2_delta )
syn0 += np.dot( l0.T, l1_delta )
【问题讨论】:
标签: python numpy neural-network nlp