Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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 稀疏\u softmax\u cross\u熵\u与\u logits结果比softmax\u cross\u熵\u与\u logits结果更差_Python_Tensorflow_Deep Learning_Softmax - Fatal编程技术网

Python 稀疏\u softmax\u cross\u熵\u与\u logits结果比softmax\u cross\u熵\u与\u logits结果更差

Python 稀疏\u softmax\u cross\u熵\u与\u logits结果比softmax\u cross\u熵\u与\u logits结果更差,python,tensorflow,deep-learning,softmax,Python,Tensorflow,Deep Learning,Softmax,我用tensorflow实现了经典的图像分类问题,我有9个类,首先我使用softmax\u cross\u entropy\u和\u logits作为分类器和训练网络,经过一些步骤后,训练精度达到99%左右 然后用sparse\u softmax\u cross\u entropy\u和

我用tensorflow实现了经典的图像分类问题,我有9个类,首先我使用
softmax\u cross\u entropy\u和\u logits
作为分类器和训练网络,经过一些步骤后,训练精度达到99%左右

然后用
sparse\u softmax\u cross\u entropy\u和
测试同样的问题,这次它根本不收敛(训练精度约为0.10和0.20)

仅供参考,对于
softmax\u cross\u entropy\u with_logits
,我使用带有dtype float32的[batch\u size,num\u classes]作为标签,对于
sparse\u softmax\u cross\u entropy\u with_logits
,我使用带有dtype int32的[batch\u size]作为标签

有人知道吗

更新:

this is code:

def costFun(self):  
    self.y_ = tf.reshape(self.y_, [-1]) 
    return tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(self.score_, self.y_))

def updateFun(self):
    return tf.train.AdamOptimizer(learning_rate = self.lr_).minimize(self.cost_)

def perfFun(self):
    correct_pred = tf.equal(tf.argmax(self.score_,1), tf.argmax(y,1))
    return(tf.reduce_mean(tf.cast(correct_pred, tf.float32)))

def __init__(self,x,y,lr,lyr1FilterNo,lyr2FilterNo,lyr3FilterNo,fcHidLyrSize,inLyrSize,outLyrSize, keepProb):

    self.x_            = x
    self.y_            = y
    self.lr_           = lr
    self.inLyrSize     = inLyrSize
    self.outLyrSize_   = outLyrSize
    self.lyr1FilterNo_ = lyr1FilterNo
    self.lyr2FilterNo_ = lyr2FilterNo
    self.lyr3FilterNo_ = lyr3FilterNo
    self.fcHidLyrSize_ = fcHidLyrSize
    self.keepProb_     = keepProb

    [self.params_w_, self.params_b_] = ConvNet.paramsFun(self) 
    self.score_, self.PackShow_      = ConvNet.scoreFun (self) 
    self.cost_                       = ConvNet.costFun  (self) 
    self.update_                     = ConvNet.updateFun(self) 
    self.perf_                       = ConvNet.perfFun  (self) 
主要内容:


我发现了这个问题,多亏@mrry提供了有益的意见,实际上我在计算准确性方面犯了错误,事实上,“稀疏_softmax”和“softmax”对于输入登录具有相同的损失(或成本)

为了计算的准确性,我改变了

correct\u pred=tf.equal(tf.argmax(self.score,1),tf.argmax(y,1))

correct\u pred=tf.equal(tf.argmax(self.score,1),y))


因为在“sparse\u softmax”中,地面真值标签不是一种热向量格式,而是实数int32或int64。

这两个操作应该为相同的逻辑和相同的标签在一个热(
tf.train.softmax\u cross\u entropy\u with\u logits()
)或sparse中产生相同的结果(
tf.train.sparse\u softmax\u cross\u entropy\u with\u logits()
)格式。你检查过这两个操作对相同的输入计算相同的损失吗?你能显示你在每个版本中使用的代码吗?@mrry谢谢你的回答,不,我在使用稀疏和softmax的相同登录中没有得到相同的结果,我也发布了我的代码,我使用32x32输入形状,9个类和其他东西,我删除了一些部分为了更具可读性,再次感谢您的关注
lyr1FilterNo = 32 
lyr2FilterNo = 64 
lyr3FilterNo = 128 

fcHidLyrSize = 1024
inLyrSize    = 32 * 32 

outLyrSize   = 9
lr           = 0.001
batch_size   = 300

dropout      = 0.5
x            = tf.placeholder(tf.float32, [None, inLyrSize ])
y            = tf.placeholder(tf.int32,    None             ) 

ConvNet_class = ConvNet(x,y,lr,lyr1FilterNo,lyr2FilterNo,lyr3FilterNo,fcHidLyrSize,inLyrSize,outLyrSize, keepProb)
initVar = tf.global_variables_initializer()


with tf.Session() as sess:
    sess.run(initVar)   

    for step in range(10000): 

        trData_i  = np.reshape( trData_i , ( -1, 32 * 32 ) ) 
        trLabel_i = np.reshape( trLabel_i, ( -1, 1       ) )  

        update_i, PackShow, wLyr1_i, wLyr2_i, wLyr3_i = sess.run([ConvNet_class.update_, ConvNet_class.PackShow_,
                            ConvNet_class.params_w_['wLyr1'], ConvNet_class.params_w_['wLyr2'], ConvNet_class.params_w_['wLyr3']], 
                            feed_dict = { x:trData_i, y:trLabel_i, keepProb:dropout} )