Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于keras的句子相似性研究_Python_Keras_Sentence Similarity - Fatal编程技术网

Python 基于keras的句子相似性研究

Python 基于keras的句子相似性研究,python,keras,sentence-similarity,Python,Keras,Sentence Similarity,我正试图在此基础上实现句子相似性架构。标签是从0到1的标准化相似性分数,因此假设它是一个回归模型 我的问题是,从第一个纪元开始,损失直接转到NaN。我做错了什么 我已经尝试过更新到最新的keras和theano版本 我的模型的代码是: def create_lstm_nn(input_dim): seq = Sequential()` # embedd using pretrained 300d embedding seq.add(Embedding(vocab_size

我正试图在此基础上实现句子相似性架构。标签是从0到1的标准化相似性分数,因此假设它是一个回归模型

我的问题是,从第一个纪元开始,损失直接转到
NaN
。我做错了什么

我已经尝试过更新到最新的keras和theano版本

我的模型的代码是:

def create_lstm_nn(input_dim):
    seq = Sequential()`
    # embedd using pretrained 300d embedding
    seq.add(Embedding(vocab_size, emb_dim, mask_zero=True, weights=[embedding_weights]))
    # encode via LSTM
    seq.add(LSTM(128))
    seq.add(Dropout(0.3))
    return seq

lstm_nn = create_lstm_nn(input_dim)

input_a = Input(shape=(input_dim,))
input_b = Input(shape=(input_dim,))

processed_a = lstm_nn(input_a)
processed_b = lstm_nn(input_b)

cos_distance = merge([processed_a, processed_b], mode='cos', dot_axes=1)
cos_distance = Reshape((1,))(cos_distance)
distance = Lambda(lambda x: 1-x)(cos_distance)

model = Model(input=[input_a, input_b], output=distance)

# train
rms = RMSprop()
model.compile(loss='mse', optimizer=rms)
model.fit([X1, X2], y, validation_split=0.3, batch_size=128, nb_epoch=20)
我还尝试使用一个简单的
Lambda
而不是
Merge
层,但结果相同

def cosine_distance(vests):
    x, y = vests
    x = K.l2_normalize(x, axis=-1)
    y = K.l2_normalize(y, axis=-1)
    return -K.mean(x * y, axis=-1, keepdims=True)

def cos_dist_output_shape(shapes):
    shape1, shape2 = shapes
    return (shape1[0],1)

distance = Lambda(cosine_distance, output_shape=cos_dist_output_shape)([processed_a, processed_b])

nan是深度学习回归中的常见问题。由于您使用的是暹罗网络,您可以尝试以下操作:

  • 检查您的数据:它们是否需要标准化
  • 尝试将密集层作为最后一层添加到网络中,但要小心选择激活功能,例如relu
  • 尝试使用其他损失函数,例如对比损失
  • 较小的学习率,例如0.0001
  • cos模式未仔细处理被零除的情况,可能是导致NaN的原因

  • 要使深度学习完美地发挥作用并不容易。

    我没有遇到
    nan
    问题,但我的损失不会改变。我找到了这个信息


    嗨,我知道你是新来的。为了帮助我们确定问题,并更快地找到您需要的答案,您是否可以提供其他信息?您看到了哪些错误(如果有)?你期望的是什么呢?好吧,现在我想弄清楚为什么我的人际网络在训练时会丢失。也许你的学习率太高了。也许还有另一个问题。如果您使用的是no,则可以在启动脚本时使用,使其在检测到
    nan
    值时引发异常,从而回溯到问题的位置。
    def cosine_distance(shapes):
        y_true, y_pred = shapes
        def l2_normalize(x, axis):
            norm = K.sqrt(K.sum(K.square(x), axis=axis, keepdims=True))
            return K.sign(x) * K.maximum(K.abs(x), K.epsilon()) /     K.maximum(norm, K.epsilon())
        y_true = l2_normalize(y_true, axis=-1)
        y_pred = l2_normalize(y_pred, axis=-1)
        return K.mean(1 - K.sum((y_true * y_pred), axis=-1))