当我尝试了解有关NLP的更多信息时,我意识到人们使用NCE损失而没有定义连接的NN。具体来说:
# Define Embeddings:
embeddings = tf.Variable(tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0))
# NCE loss parameters
nce_weights = tf.Variable(tf.truncated_normal([vocabulary_size, embedding_size],
stddev=1.0 / np.sqrt(embedding_size)))
nce_biases = tf.Variable(tf.zeros([vocabulary_size]))
# Create data/target placeholders
x_inputs = tf.placeholder(tf.int32, shape=[batch_size])
y_target = tf.placeholder(tf.int32, shape=[batch_size, 1])
valid_dataset = tf.constant(valid_examples, dtype=tf.int32)
# Lookup the word embedding:
embed = tf.nn.embedding_lookup(embeddings, x_inputs)
# Get loss from prediction
loss = tf.reduce_mean(tf.nn.nce_loss(weights=nce_weights,
biases=nce_biases,
labels=y_target,
inputs=embed,
num_sampled=num_sampled,
num_classes=vocabulary_size))
相反,为什么人们没有在最后一层中定义连接的NN和带有S型曲线的a作为激活函数?如果我们要使用一键编码,并且与最常用的值表示形式无关,那么我的建议是否被认为可行?如果我的问题有点傻,很抱歉,因为我对NLP的了解还不多。
谢谢