码迷,mamicode.com
首页 > Web开发 > 详细

C4-ResNet-TF-小象cv-code

时间:2018-04-18 19:15:28      阅读:777      评论:0      收藏:0      [点我收藏+]

标签:通过   字符串转换   min   SQ   字符串   字符   lag   flags   步骤   

https://blog.csdn.net/chaipp0607/article/details/75577305

https://blog.csdn.net/leastsq/article/details/54374909

 

tf.logging.set_verbosity(tf.logging.INFO) 现在运行代码时,将看到如下的附加日志输出: INFO:tensorflow:loss = 1.18812, step = 1INFO:

tf.app.run() ~进入main ~elif FLAGS.num_gpus == 1:自动找到gpu
 
# 残差网络模型参数
  hps = resnet_model.HParams(batch_size=batch_size,
                             num_classes=num_classes,
                             min_lrn_rate=0.0001,
                             lrn_rate=0.1,
                             num_residual_units=5,
                             use_bottleneck=False,
                             weight_decay_rate=0.0002,
                             relu_leakiness=0.1,
                             optimizer=‘mom‘)
bottleneck:
通过已经训练好的模型,把bottleneck特征抽取出来,然后滚到下一个“小”模型里面,也就是全连接层。
实施步骤为:
1、把训练好的模型的权重拿来,model;
2、运行,提取bottleneck feature(网络在全连接之前的最后一层激活的feature map,卷积-全连接层之间),单独拿出来,并保存
3、bottleneck层数据,之后 + dense全连接层,进行fine-tuning
提取图片的bottleneck特征需要步骤:
1、载入图片;
2、灌入pre-model的权重;
3、得到bottleneck feature
--》使用哪种残差单元(带bottleneck还是不带bottleneck)

 

对于文件名队列,我们使用tf.train.string_input_producer函数。这个函数需要传入一个文件名list,系统会自动将它转为一个文件名队列。

我们必须要把数据先读入后才能进行计算,假设读入用时0.1s,计算用时0.9s,那么就意味着每过1s,GPU都会有0.1s无事可做,这就大大降低了运算的效率。。而使用tf.train.start_queue_runners之后,才会启动填充队列的线程,这时系统就不再“停滞”。此后计算单元就可以拿到数据并进行计算,整个程序也就跑起来了

tf.FixedLengthRecordReader是读取固定长度字节数信息(针对bin文件使用FixedLengthRecordReader读取比较合适),结果表明下次调用时会接着上次读取的位置继续读取文件,而不会从头开始读取。
例如:
import tensorflow as tf

filenames = [‘D:/Tensorflow/test/txt1.txt‘]
filename_queue = tf.train.string_input_producer(filenames)
reader = tf.FixedLengthRecordReader(record_bytes=4)
key, value = reader.read(filename_queue)
b = value
sess = tf.InteractiveSession()
tf.train.start_queue_runners(sess=sess)
print(sess.run(b))
print(‘\n‘)
print(sess.run(b))
--》txt1.txt文件中就有4字节的内容

https://zhuanlan.zhihu.com/p/27238630   tf读取机制~队列

decode_raw操作可以讲一个字符串转换为一个uint8的张量

tf.cast(x, dtype, name=None) 将x的数据格式转化成dtype.例如,原来x的数据格式是bool, 那么将其转化成float以后,就能够将其转化成0和1的序列。

tf.slice() 从返回值上去理解,现在假设input的shape是[a1, a2, a3], begin的值是[b1, b2, b3],size的值是[s1, s2, s3],那么tf.slice()返回的值就是 input[b1:b1+s1, b2:b2+s2, b3:b3+s3]。
如果 si=?1 ,那么 返回值就是 input[b1:b1+s1,..., bi: ,...]

tf.contrib.framework.get_or_create_global_step()得到目前模型训练到达全局步数。

bottleneck残差模块让残差网络可以向更深的方向上走,原因就是因为同一通道数的情况下,bottleneck残差模块要比朴素残差模块节省大量的参数,一个单元内的参数少了,对应的就可以做出更深的结构。

产生一个滑动平均计算对象,MOVING_AVERAGE_DECAY = 0.999,则每一代中的decay值更新如下
           min(decay, (1 + num_updates) / (10 + num_updates))
采用这个计算得到的decay值对上面梯度法更新得到的所有参数进行平滑处理如下:
            shadow_variable = decay * shadow_variable + (1 - decay) * variable

 

C4-ResNet-TF-小象cv-code

标签:通过   字符串转换   min   SQ   字符串   字符   lag   flags   步骤   

原文地址:https://www.cnblogs.com/rosyYY/p/8876025.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!