Tensorflow学习之入门学习总结(持续更新......)
来源:互联网 发布:淘宝双11是什么意思啊 编辑:程序博客网 时间:2024/06/11 21:52
- 三种利用会话Session的方法
- 使用withDevice语句明确指定哪个cpu或gpu被调用
- 变量variables和placeholder怎么区分
- tensorflow网络运行流程图
- 数据输入
- 数据增强的方法
- 定义网络结构
- paddingSAME和VALID的区别
- 定义batch_normalization层
- 网络结构设计原则
- 定义损失函数和优化算法
- 评估模型
三种利用会话Session()的方法:
(1)
sess=tf.Session()result = sess.run(product)print(result)sess.close()
(2)利用with,在with结束时,会话自动关闭,不需要自己close
with tf.Session() as sess: result = sess.run([product]) print(result)
(3)利用交互式会话,主要注意ops.run()以及tensor.eval()的使用
sess = tf.InteractiveSession()x = tf.Variable([1.0,2.0])a = tf.constant([3.0,3.0])x.initializer.run()sub = tf.sub(x,a)print(sub.eval())sess.close()
使用with…Device语句明确指定哪个cpu或gpu被调用
常常在定义权值和偏置时使用cpu,不然默认gpu
with tf.device("/cpu:0"):
若要使用gpu,可以指定哪一个gpu如下
with tf.device("/gpu:0"):with tf.device("/gpu:1"):
变量variables和placeholder怎么区分
placeholder常常用来临时替换一个操作的输出结果,并且需要feed进数据,利用feed_dict={},常用来定义输入x,预测输出y等如下
x=tf.placeholder(tf.float32)#orx=tf.placeholder(“float”,[None,784])#None代表张量的第一个维度可以是任何长度,也就是训练集train的数量#…#并且Print(sets.run([x],feed_dict={x:[3.]}))
而variables常用作代表一个可修改的张量,将模型参数用其表示
w=tf.Variable(tf.zeros([784,10]))b=tf.Variable(tf.zeros([10]))
tensorflow网络运行流程图
数据输入
数据增强的方法
一般放在图片解码之后如
tf.decode_png(image_contents,channels=3) ########################################################## # you can put data augmentation here, I didn't use it ########################################################## # # data argumentation # image = tf.random_crop(image, [24, 24, 3])# randomly crop the image size to 24 x 24 # image = tf.image.random_flip_left_right(image) # image = tf.image.random_brightness(image, max_delta=63) # image = tf.image.random_contrast(image,lower=0.2,upper=1.8) # image = tf.image.per_image_standardization(image) # substract off the mean and divide by the variance
定义网络结构
padding=’SAME’和’VALID’的区别
SAME和VALID的重要性在于设计网络结构时,你可以自己清楚掌握最后每层输出的维数,结合图片大小,可以适当调整滤波器的大小和步长。
SAME:输出的特征图和输入特征图有相同的维数,其中利用0填充输入图来达到这一需求
VALID:就是没有利用填充
填充一般运用在卷积层和池化层中,如下图池化操作的例子:
‘VALID’ = 没有填充
‘SAME’ = 0填充
在这个例子中:
- 输入宽度=13
- 滤波器宽度=6
步长=5
注意:‘VALID’ 只丢弃最右边或者最下面的值
‘SAME’ 尝试平均左右的填充,如果列数要被成为偶数,那么会先填充最右边的列,相同的,也是会先填充最下面的行。
下面给一个Tensorflow中的例子看看:对于‘SAME’填充,输出的高度和宽度计算如下:
对于‘VALID’填充,输出的高度和宽度计算如下:
定义batch_normalization层
个人在全连接层的第一层和第二层之后添加了bn之后,减轻过拟合的效果很明显,很好用!!
def batch_norm(x): '''Batch normlization(I didn't include the offset and scale) ''' epsilon = 1e-3 batch_mean, batch_var = tf.nn.moments(x, [0]) x = tf.nn.batch_normalization(x, mean=batch_mean, variance=batch_var, offset=None, scale=None, variance_epsilon=epsilon) return x
网络结构设计原则
(1)增加网络的深度(2)增加网络的宽度(3)努力实现简洁化-使用更少类型的层以保持网络尽可能简单(4)结构对称性(5)金字塔形状-在整个架构中应该有一个整体的平滑的下采样,而且该下采样应该与信道数量的增长结合起来(6)用训练数据覆盖问题空间提升泛化能力-如正则化方法的dropout,drop-path(7)过训练-使用噪声数据(8)增量特征构造-skip in resnet(9)规范层输入-使层输入标准化,如batch normalization(10)可用资源决定网络深度-根绝任务需求设计网络深度(11)求和连接-对分支(宽度)进行求和(或平均)操作(12)下采样过渡-当池化或使用步幅超过1的下采样时,组合分支的最好方法是串联输出信道,它可以平滑地实现用下采样方式实现信道的连接和信道数量的增加(13)maxout for competition-当分支由不同大小的核组成时,maxout可用于尺度不变性,这类似最大池化的平移不变性
定义损失函数和优化算法
常用的损失函数为交叉熵损失函数即
cross_entropy = -tf.reduce_mean(y_*tf.log(y))#y_为实际的分布(标签),y为预测的概率分布
常用优化算法
print("Use thr optimizer:{}".format(FLAGS.optimizer))if FLAGS.optimizer == "sgd": optimizer = tf.train.GradientDescentOptimizer(learning_rate)elif FLAGS.optimizer == "adadelta": optimizer = tf.train.AdadeltaOptimizer(learning_rate)elif FLAGS.optimizer == "adagrad": optimizer = tf.train.AdagradOptimizer(learning_rate)elif FLAGS.optimizer == "adam": optimizer = tf.train.AdamOptimizer(learning_rate)elif FLAGS.optimizer == "ftrl": optimizer = tf.train.FtrlOptimizer(learning_rate)elif FLAGS.optimizer == "rmsprop": optimizer = tf.train.RMSPropOptimizer(learning_rate)elif FLAGS.optimizer == "momentum": optimizer = tf.train.MomentumOptimizer(learning_rate)elif FLAGS.optimizer == "adagraddao": optimizer = tf.train.AdagradDAOptimizer(learning_rate)elif FLAGS.optimizer == "proadagrad": optimizer = tf.train.ProximalAdagradOptimizer(learning_rate)elif FLAGS.optimizer == "prosgd": optimizer = tf.train.ProximalGradientDescentOptimizer(learning_rate)else: print("Unknown optimizer:{},exit now".format(FLAGS.optimizer)) exit(1)
评估模型
一般评估模型常用tf.argmax()得到预测值correct_prediction,其为bool值,还要转换成float类型才能得到accuracy
correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_,1))accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float"))
- Tensorflow学习之入门学习总结(持续更新......)
- TensorFlow学习问题总结(持续更新)
- zookeeper入门学习总结(持续更新。。)
- 学习总结,持续更新
- Tensorflow深度学习之六:基础函数简介(持续更新中)
- iOS学习笔记总结一(持续更新)
- iOS学习笔记总结二(持续更新)
- 持续更新--Phonegap基础学习总结
- yii2学习笔记,错误总结,持续更新
- 学习注意点总结:持续更新~
- Mybatis学习地址总结整理-持续更新......
- Swift学习之小记(持续更新)
- Tensorflow 常用方法总结(持续更新)
- SBT学习 [持续更新...]
- ios学习 持续更新
- caffe学习,持续更新
- python学习 持续更新
- OVM学习--持续更新
- Linux高性能服务器编程--用进程池实现的简单CGI服务器
- swagger ui js 错误:Failed to execute 'serializeToString' on 'XMLSerializer': parameter 1 is not of typ
- 重建scan监听命令
- 世界编程语言排行榜
- 引用当前事件event
- Tensorflow学习之入门学习总结(持续更新......)
- javawebday06(xml 简介 dtd约束)
- 解决eclipse内置tomcat添加不了jdk1.8项目
- Android初级学习重点提取
- ubuntu下 安装PX4编译环境
- rz -bey
- 计算机网络----- 协议层次
- java.lang.ClassNotFoundException: ch.qos.logback.classic.spi.ThrowableProxy
- OracleRAC集群SCAN说明