- 运行mnist_with_summaries学习TensorBoard时,由于需要GPU支持,运行窗口报错:Couldn't open CUDA library cupti64_80.dll
解决办法:将cupti64_80.dll从C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\extras\CUPTI\libx64复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64中
2. TensorBoard可视化(在训练中,随时可以可视化)。在任意位置打开命令行终端(无需进入python),输入:tensorboard --logdir= F://tmp//cifar10//cifar10_train (地址不需要加引号)
注1:为了保证加载的是你想要的model,最好在命令终端先进入logdir所在的目录(至少先进入对应的盘,例如下面的F盘),即先进入cd F:\tmp,然后再开启TensorBoard.
注2:切换目录直接用cd F:\tmp;若需要查看此目录下有哪些文件夹,直接输入dir;若需要返回上层目录,直接用cd..
注3:有时候只可以切换到当前目录下的子目录里,而无法直接切换到其他盘符下的目录,可以在cd和目录中间添加/d,即使用cd /d F:\tmp命令。若只切换到盘符,可以不用cd,只用F:即可。
3. tf.train.op或者tf.image.op此操作中的op默认为一个可视化块,命名为op。例如调用tf.train.shuffle_batch()函数,会默认将shuffle_batch简化为一个名字为shuffle_batch的可视化块。
此外,调用tf.train.string_input_poducer()函数,在对可视化块进行命名是,会删除'string_'这段字符,即会命名为input_producer.
若直接调用操作tf.op,则一般只是单单作为一个操作单元,并不简化为可视化块。例如调用tf.reshape()函数,则只是在graph中显示此操作;但当tf.op(x, para)特别依赖于para的选择时,此op也会以一个可视化块的形式展示,例如tf.random_crop(reshaped_image, [height, width, 3])。
若某个操作被多个操作多次利用,则也会作为一个可视化块被列于旁边,例如tf.image.random_flip_left_right(),tf.image.random_brightness(), tf.image.random_contrast()这几个函数都需要归一化函数,于是random_uniform被作为可视化块列于旁边,这些函数分别被命名为stride_slice,adjust_bringtness和adjust_constrast可视化块。
但是,为什么tf.image.per_image_standardization()没有被作为可视化块呢?不懂,有待继续学习。
另,若调用的函数中表明了name='name_string',则以此name_string为可视化块的名称。例如cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=labels, logits=logits, name='cross_entropy_per_example')被显示为以cross_entropy_per_example的可视化块;cross_entropy_mean = tf.reduce_mean(cross_entropy, name='cross_entropy')被显示为以cross_entropy命名的可视化块。
4. 命名可视化块时,在进行嵌套时,若用with tf.name_scope('A')套在with tf.variable_scope('B') as scope外层,则A和B是并列的关系,都会显示在大图中,若想让B嵌入A中,需要把第一个改为with tf.variable('A'). 但两个with tf.name_scope('A')和with tf.name_scope('B')可以套用,并且产生嵌套式的可视化块。若要在with tf.Graph().as_default(): 内部定义可视化块,需要将前者改为with tf.Graph().as_default() as g:,内部用with g.name_scope来定义可视化块。
未完待续。。。。。