发新帖

tensorflow中sampled_softmax_loss与nce_loss的使用?

[复制链接]
592 0

快来加入 TensorFlowers 大家庭!

您需要 登录 才可以下载或查看,没有帐号?加入社区

x
minist数据集上,使用sampled_softmax_loss与nce_loss都不收敛,是使用的问题还是由于类别太少的原因。感觉即使类别少从原理上来说也不应该不收敛。但将loss变化改为sparse_softmax_cross_entropy_withlogits就没有问题。测试的目的主要是想将nce_loss用在上百万类别的分类问题上:核心代码如下:
x = tf.placeholder(tf.float32, [None, INPUT_NODE], name='x-input')
y_ = tf.placeholder(tf.int64, [None, 1], name='y-input')
# 生成隐藏层的参数。
weights1 = tf.Variable(tf.truncated_normal([INPUT_NODE, LAYER1_NODE], stddev=0.1))
biases1 = tf.Variable(tf.constant(0.1, shape=[LAYER1_NODE]))
# 生成输出层的参数。
weights2 = tf.Variable(tf.truncated_normal([OUTPUT_NODE, LAYER1_NODE], stddev=0.1))
biases2 = tf.Variable(tf.constant(0.1, shape=[OUTPUT_NODE]))
layer1 = tf.nn.relu(tf.matmul(x, weights1) + biases1)
loss = tf.reduce_mean(tf.nn.sampled_softmax_loss(weights=weights2, biases=biases2, labels=y_, inputs=layer1 ,num_sampled=7,num_classes=OUTPUT_NODE))
y = tf.matmul(layer1, tf.transpose(weights2)) + biases2
# 优化损失函数
#train_step = tf.train.GradientDescentOptimizer(1).minimize(loss)
train_step = tf.train.AdagradOptimizer(1).minimize(loss)
correct_prediction = tf.equal(tf.argmax(y, 1), y_)
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

将loss变化改为sparse_softmax_cross_entropy_with_logits可以收敛:
x = tf.placeholder(tf.float32, [None, INPUT_NODE], name='x-input')
y_ = tf.placeholder(tf.int64, [None], name='y-input')
# 生成隐藏层的参数。
weights1 = tf.Variable(tf.truncated_normal([INPUT_NODE, LAYER1_NODE], stddev=0.1))
biases1 = tf.Variable(tf.constant(0.1, shape=[LAYER1_NODE]))
# 生成输出层的参数。
weights2 = tf.Variable(tf.truncated_normal([OUTPUT_NODE, LAYER1_NODE], stddev=0.1))
biases2 = tf.Variable(tf.constant(0.1, shape=[OUTPUT_NODE]))
layer1 = tf.nn.relu(tf.matmul(x, weights1) + biases1)
y = tf.matmul(layer1, tf.transpose(weights2)) + biases2
# 计算交叉熵及其平均值
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y, labels=y_)
cross_entropy_mean = tf.reduce_mean(cross_entropy)
loss = cross_entropy_mean
# 优化损失函数
#train_step = tf.train.GradientDescentOptimizer(1).minimize(loss)
train_step = tf.train.AdagradOptimizer(1).minimize(loss)
correct_prediction = tf.equal(tf.argmax(y, 1), y_)
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

我知道答案 回答被采纳将会获得10 金币 + 15 金币 已有0人回答
本楼点评(0) 收起
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

主题

帖子

3

积分
快速回复 返回顶部 返回列表