【问题标题】:NN gets stuck and np.exp overflowNN 卡住并且 np.exp 溢出
【发布时间】: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


    【解决方案1】:

    有一种数值安全的方法可以计算 sigmoid 函数。基本上,您需要根据 x 是大于还是小于零来区分情况。请参阅下面链接中的代码。

    http://timvieira.github.io/blog/post/2014/02/11/exp-normalize-trick/

    【讨论】:

      猜你喜欢
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多