Tensorflow爬过的坑及使用小技巧

---------------------------------------------------------------------------------------------------------

1、Expected size[ ] in [ , ], but got  ,报错如下图所示,源码如上图所示,该问题出现在slice操作,size[2]是指对a进行slice操作时,在tensor的index为2的维度上参数有错误,示例报错的原因可以解释如下,a的begin index数组是[0,1,1],截取的尺寸的数组为[-1,2,3],也就是说在维度为2的维度上从1开始取长度为3个的数据,但是这个维度从1开始只有2个数据,即截取的尺寸可取的值范围在[0,2],却写了3超出了这个范围。

b=[[1,2,3],[3,1,2],[4,5,6]]
c=tf.reshape(b,[1,3,3])

a=tf.concat([c,c],0)#tf.shape(a)=[2,3,3]

print(sess.run(tf.shape(tf.slice(a,[0,1,1],[-1,2,2]))))

print(sess.run(tf.slice(a,[0,1,1],[-1,2,2])))

2、查看tensorflow相关api函数帮助
import tensorflow as tf
help(tf.contrib.slim.conv2d)#用这条指令来查看帮助说明
3、查看tensorflow版本和安装路径
import tensorflow as tf
tf.__version__
tf.__path__

4、更新tensorflow(要保证cuda和cudnn为最新tensorflow支持的版本)

命令行输入pip install --upgrade tensorflow_gpu 

5、关于tf.app.flags

是tensorflow中对一些变量标签的集中管理机制。可以定义多种变量标签,如:string、integer、boolean和float。

flags = tf.app.flags

flags.DEFINE_string("ckpt_path", "ckpt", "Path to store checkpoints")#依次定义flag的名字,内容,注释

flags.DEFINE_integer("vocab_size", 2000, "Maximum size of vocabulary")

flags.DEFINE_boolean("is_training", True, "Whether in training mode")

flags.DEFINE_float("lr", 1e-10, "The learning rate of model")

然后通过flags.FLAGS.flag_name调用。

6、到保存的ckpt模型参数文件检查参数设置的名字

from tensorflow.python import pywrap_tensorflow
import os
checkpoint_path = os.path.join('/home/liuyang/train/logs/save/en/', "model_step17414.ckpt")
reader = pywrap_tensorflow.NewCheckpointReader(checkpoint_path)
var_to_shape_map = reader.get_variable_to_shape_map()
for key in var_to_shape_map:
    print("tensor_name: ", key)

    print(reader.get_tensor(key))

7、使用tensorboard和保存、恢复模型

使用tensorboard的核心思想是将模型跑着的过程的一些参数以日志的方式记录下来,然后在网页一个端口可以调用这些日志文件以可视化。

 

def variable_summaries(var, name):

#该函数已经包含了可以记录的各种变量

    with tf.name_scope('summaries'):
        mean = tf.reduce_mean(var)
        tf.summary.scalar('mean/' + name, mean)
        with tf.name_scope('stddev'):
            stddev = tf.sqrt(tf.reduce_sum(tf.square(var - mean)))
        tf.summary.scalar('sttdev/' + name, stddev)
        tf.summary.scalar('max/' + name, tf.reduce_max(var))
        tf.summary.scalar('min/' + name, tf.reduce_min(var))

        tf.summary.histogram(name, var)

#用一个name_scope然后用一下summaries记录。

    with tf.name_scope('w_conv1'):
        w_conv1=weight_variable([n+1,embedding_size,1,2*embedding_size],1,drop_keep,(n+1)*embedding_size)

        variable_summaries(w_conv1, 'weight-conv1')

#定义graph的时候加上saver和summary.merge_all()

    saver = tf.train.Saver()

    merged = tf.summary.merge_all()

#在session开始的时候,打开一个日志文件

    train_writer=tf.summary.FileWriter(log_dir+'/train',session.graph)

#在每个循环需要写入日志的地方加入add_summary

    train_writer.add_summary(summary,step)

#保存模型的话可以用这个

    save_path = saver.save(session, save_dir+"/model_step%d.ckpt"% step)

到命令行执行 tensorboard --logdir=/home/liuyang/train/logs/summaries
出来提示信息的网页,复制到浏览器即可
恢复变量restore就行,saver.restore(sess, "/tmp/model.ckpt")

如果只恢复某个变量到某个变量,则  saver = tf.train.Saver({"my_v2": v2}) 前者是模型变量中名称

8、对gpu的选择及增长式和百分比式模式设置

import os
os.environ['CUDA_VISIBLE_DEVICES']='0'#指定使用第一块GPU
config=tf.ConfigProto()
config.gpu_options.allow_growth=True#增长式
config.gpu_options.per_process_gpu_memory_fraction=0.9#百分比模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值