Tensorflow 错误';标记和值不相同';使用tf.metrics.auc时

Tensorflow 错误';标记和值不相同';使用tf.metrics.auc时,tensorflow,deep-learning,Tensorflow,Deep Learning,我正在尝试将分割任务的AUC记录到tensorboard,但遇到了一些无法解决的问题。我知道当不包括AUC相关行时,代码会一直运行到完成。似乎传递给tf.metrics.auc的两个变量中的一个没有与之相关的形状 我的培训代码定义如下: def run_model(): valCosts=[] GLOBAL_STEP = 0 minLoss=10000000000 pred = uNet3D_noBN(X, BETA[j], KERNEL_SIZE) c

我正在尝试将分割任务的AUC记录到tensorboard,但遇到了一些无法解决的问题。我知道当不包括AUC相关行时,代码会一直运行到完成。似乎传递给tf.metrics.auc的两个变量中的一个没有与之相关的形状

我的培训代码定义如下:

def run_model():

    valCosts=[]
    GLOBAL_STEP = 0
    minLoss=10000000000
    pred = uNet3D_noBN(X, BETA[j], KERNEL_SIZE)
    cost = tf.reduce_sum(tf.nn.sigmoid_cross_entropy_with_logits(labels=tf.reshape(Y,[-1]),logits=tf.reshape(pred,[-1])))
    auc  = tf.metrics.auc(tf.reshape(Y,[-1]),tf.reshape(tf.nn.sigmoid(pred), [-1] ), num_thresholds=50)

    update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
    with tf.control_dependencies(update_ops):
    # this with statement updates the BN parameters if BN is being used
        optimizer = tf.train.AdamOptimizer(learning_rate=LR[i]).minimize(cost)

    with tf.name_scope("training"):
        tf.summary.scalar("training_cost", cost, collections=['training'])
        tf.summary.scalar("training_auc", auc, collections=['training'])
        for var in tf.trainable_variables():
            tf.summary.histogram(var.op.name , var, collections=['training'])

    with tf.name_scope("validation"):
        tf.summary.scalar("validation_cost", cost, collections=['validation'])
        tf.summary.scalar("validation_auc", auc, collections=['validation'])


    saver = tf.train.Saver()

    with tf.Session() as sess:
        train_merge      = tf.summary.merge_all(key='training')
        validation_merge = tf.summary.merge_all(key='validation')
        train_writer = tf.summary.FileWriter( graphDir + '/training/', sess.graph)
        validation_writer = tf.summary.FileWriter( graphDir + '/testing/', sess.graph)
        print('Beginning Session!')
        sess.run(tf.global_variables_initializer())
        sess.run(tf.local_variables_initializer())
        print('Running Model!')

        while GLOBAL_STEP <= int(np.floor(MAX_ITER/BATCH_SIZE[k])):

            if GLOBAL_STEP % NUM_STEPS != 0:
                x,y=draw_batch(train_dir,BATCH_SIZE[k])
                y[y>0]=1
                flip = random.uniform(0,1)
                if flip>0.5:
                    x = np.flip(x,2)
                    y = np.flip(y,2)
                _, acc, c = sess.run([optimizer, train_merge, cost], feed_dict = {X: x, Y: y})
                _
                train_writer.add_summary(acc, GLOBAL_STEP)
                #train_writer.add_summary(summary, GLOBAL_STEP)
            else:
                x,y=draw_batch(val_dir,BATCH_SIZE[k])
                y[y>0]=1
                acc, c = sess.run([validation_merge,cost], feed_dict = {X: x, Y: y})
                validation_writer.add_summary(acc, GLOBAL_STEP)
                #validation_writer.add_summary(summary, GLOBAL_STEP)
                #save_path=saver.save(sess, outDir + '/model')
                print(c)
                if c < minLoss:
                    save_path=saver.save(sess, outDir + '/model')
                    minLoss=c                        
                valCosts.append(c)



            GLOBAL_STEP+=1
        g= open(graphDir+'/val.pickle', 'w+')   
        pickle.dump([valCosts], g)


for k in range(0,len(BATCH_SIZE)):
    for i in range(0, len(BETA)):
        for j in range(0, len(LR)):
            X = tf.placeholder(tf.float32, shape=[BATCH_SIZE[k], None, None, None, 1],   name='X')  #input
            Y = tf.placeholder(tf.float32, shape = [BATCH_SIZE[k], None, None, None, 1], name='Y')  #'labels'
            hypers = dict(zip(('LR','EPS','BETA', 'BATCH_SIZE', 'NUM_STEPS', 'KERNEL_SIZE', 'NUM_CHANNELS'), (LR[i], EPS, BETA[j], BATCH_SIZE[k], NUM_STEPS, KERNEL_SIZE, NUM_CHANNELS)))

            os.chdir(launch)
        timestr = time.strftime("%Y%m%d-%H%M%S")
        outDir  = '/home/mira/karl_data/striatum/outputs/' + timestr
        os.mkdir(outDir)

        graphDir = outDir
        os.mkdir(graphDir + '/training/')
        os.mkdir(graphDir + '/testing/')


        with open(outDir + '/hyperparams.txt', 'w+') as f: 
            for key, value in hypers.items():
                f.write('%s:%s\n' % (key, value))



        run_model()
        tf.reset_default_graph()
def run_model():
成本=[]
全局步进=0
最小损失=1000000000
pred=uNet3D_noBN(X,β[j],内核大小)
成本=tf.减少总和(tf.nn.sigmoid\u交叉\u熵\u与logits(标签=tf.重塑(Y,[-1]),logits=tf.重塑(pred,[-1]))
auc=tf.metrics.auc(tf.reformate(Y,[-1]),tf.reformate(tf.nn.sigmoid(pred,[-1]),num_阈值=50)
update\u ops=tf.get\u集合(tf.GraphKeys.update\u ops)
使用tf.control\u依赖项(更新操作):
#如果正在使用BN,此with语句将更新BN参数
优化器=tf.train.AdamOptimizer(学习率=LR[i])。最小化(成本)
具有tf.name_范围(“培训”):
tf.summary.scalar(“培训成本”,成本,集合=['training']))
tf.summary.scalar(“training_auc”,auc,collections=['training'])
对于tf.trainable_variables()中的变量:
直方图(var.op.name,var,collections=['training'])
使用tf.name_范围(“验证”):
scalar(“验证成本”,成本,集合=['validation'])
scalar(“validation_auc”,auc,collections=['validation'])
saver=tf.train.saver()
使用tf.Session()作为sess:
train\u merge=tf.summary.merge\u all(key='training')
验证\u merge=tf.summary.merge\u all(key='validation')
train_writer=tf.summary.FileWriter(graphDir+'/training/',sess.graph)
验证_writer=tf.summary.FileWriter(graphDir+'/testing/',sess.graph)
打印('开始会话!')
sess.run(tf.global\u variables\u initializer())
sess.run(tf.local\u variables\u initializer())
打印('运行模型!')
而全局_步骤0]=1
翻转=随机均匀(0,1)
如果翻转>0.5:
x=np.翻转(x,2)
y=np.翻转(y,2)
_,acc,c=sess.run([optimizer,train\u merge,cost],feed\u dict={X:X,Y:Y})
_
培训编剧。添加摘要(acc、全局步骤)
#培训编剧。添加摘要(摘要,全局步骤)
其他:
x、 y=绘制批次(val\U dir,批次大小[k])
y[y>0]=1
acc,c=sess.run([validation\u merge,cost],feed\u dict={X:X,Y:Y})
验证\u编写器。添加\u摘要(acc,全局\u步骤)
#验证\u编写器。添加\u摘要(摘要、全局\u步骤)
#save_path=saver.save(sess,outDir+'/model')
印刷品(c)
如果c
当我运行此命令时,会出现以下错误:

文件“grid_search.py”,第78行,在run_模型中 scalar(“validation_auc”,auc,collections=['validation']) 文件“/usr/local/lib/python2.7/dist packages/tensorflow/python/summary/summary.py”,第90行,标量格式 val=\u gen\u logging\u ops.scalar\u summary(tags=tag,values=tensor,name=scope) 文件“/usr/local/lib/python2.7/dist packages/tensorflow/python/ops/gen_logging_ops.py”,第623行,在scalar_摘要中 “ScalarSummary”,标记=标记,值=值,名称=名称) 文件“/usr/local/lib/python2.7/dist packages/tensorflow/python/framework/op_def_library.py”,第787行,在“应用”和“操作”助手中 op_def=op_def) 文件“/usr/local/lib/python2.7/dist packages/tensorflow/python/util/deprecation.py”,第454行,在new_func中 返回函数(*args,**kwargs) 文件“/usr/local/lib/python2.7/dist packages/tensorflow/python/framework/ops.py”,第3155行,在create_op中 op_def=op_def) 文件“/usr/local/lib/python2.7/dist packages/tensorflow/python/framework/ops.py”,第1717行,在init self.\u traceback=tf\u stack.extract\u stack()

InvalidArgumentError(回溯见上文):标记和值的形状不同:[]!=[2] (标签“验证/验证\ auc”) [[Node:validation/validation\u auc=ScalarSummary[T=DT\u FLOAT,\u device=“/job:localhost/replica:0/task:0/device:CPU:0”](validation/validation\u auc/tags,validation/validation\u auc/values/\u 39)]

可能相关: