如何在我的模型中实现这种分布?

时间:2019-02-20 12:12:39

标签: python neural-network prediction

我有一个NN模型,可将3类[-1,0,1]之间的语句分类

stop = EarlyStopping(monitor='val_loss', min_delta=0.01, patience=15, verbose=1, mode='auto', restore_best_weights=True)
model = Sequential()
model.add(Embedding(num_words, EMBEDDING_DIM, 
                        input_length=MAX_SEQUENCE_LENGTH))
model.layers[0].set_weights([embedding_matrix])
model.layers[0].trainable = False
model.add(Dense(300,kernel_regularizer=regularizers.l1(0.000001)))
model.add(Dropout(0.35))
model.add(Dense(200,kernel_regularizer=regularizers.l1(0.000001)))
model.add(Dropout(0.35))
model.add(Dense(100,kernel_regularizer=regularizers.l1(0.000001)))
model.add((LSTM(50, dropout=0.1, recurrent_dropout=0.1)))#, kernel_regularizer=regularizers.l1(0.00001))))
model.add(Dense(1,kernel_regularizer=regularizers.l1(0.000001)))
model.add(Activation("tanh"))

model.compile(loss="mse", optimizer="rmsprop", 
                metrics=["accuracy"])

训练后,我使用model.predict()来“预测”新值,并且得到了

array([[ 0.82085645],
    [ 0.8304224 ],
    [ 0.8198626 ],
    [ 0.8128166 ],
    [ 0.1621628 ],
    [ 0.74597526],
    [-0.59259003],
    [-0.57140785]], dtype=float32)

好的,这是我的第一个问题。我该怎么解释?我的第一个念头是

predictioncm = model.predict(texts_test)
predictioncm1 = []
for p in predictioncm:
    if p<=0.5 and p>=-0.5:
        predictioncm1.append(0)
    elif p>0.5:
        predictioncm1.append(1)
    else:
        predictioncm1.append(-1)

但是事情是...当我分配时:

predictioncm = model.predict_proba(texts_test)
predictioncm1 = []
for p in predictioncm:
    if p<=0.7999 and p>=0:
        predictioncm1.append(0)
    elif p>0.7999:
        predictioncm1.append(1)
    else:
        predictioncm1.append(-1)

与我想要的结果完美匹配(这些陈述来自测试集,这就是为什么我知道结果的原因)。因此结果完全歪斜为1。 因此,我的第二个问题是:是否可以将这些权重分配给我的主要模型以直接获得这些值,或者是一种证明这种分配合理性的方法?还是我必须保留我的第一个想法的结果,因为“正确”?

0 个答案:

没有答案