写在前面的话:
TF的结构在开始阶段还是比较难受的。它和之前学的所有语言都不一样。传统语言都是顺序运行,TF采用tensor的方式工作,因此在定义完之后,在没调用run之前。只是有一堆定义,也就是计算图。这里记录下遇到的常用函数,不限于TF
文章目录
函数 TF/Py
- np.random.randint()
Numpy的随机函数,虽然不在TF,但是一样用到。 - placeholder() / Variable()
有点像Java里面StringBuffer和String之间的区别。一个是占位,在计算图例事先挖好的萝卜坑。一个是实实在在的变量。 - tf.reduce_sum()
reduce_sum 是 tensor 内部求和的工具。 - tf.reduce_mean()
tf.reduce_mean是将tensor内部求均值的工具 - tf.reshape(tensor, shape, name=None)
类似OpenCV的reshape - tf.argmin(input, dimension, name=None)/ argmax()
沿需要的维度找最小(大)值的索引值,最小由0开始(图片来自51cto摘抄)
- .eval()
打印变量 - tf.rank(arr) / tf.shape()
输出矩阵维度 / 打印矩阵呢的行和列:tf.shape(要打印的矩阵).eval() - tf.cast(*, type)
数据类型转换 - mnist.train.next_batch()
MNIST数据集返回一个batch的数据的接口。有点像迭代器。 - Python中append和extend的区别
使用append的时候,是将new_media看作一个对象,整体打包添加到music_media对象中
list.append(object) 向列表中添加一个对象object
append像数据结构的广义表
list.extend(sequence) 把一个序列seq的内容添加到列表中
extend像merge - strip() 剔除字符串首尾无效字符。
开始看的时候总感觉脑瓜懵懵的,应该是突然来一堆不熟悉的逻辑让人手足无措,写到这里突然反应过来,这不是和之前OpenCV里面/Android/Java里面的那些接口一样用吗。。直接查文档上就完了…开始接受不了的原因是这些传进去的参数都不是参数而是tensor,在计算过程中也都是操作tensor,其他都是一样的。
-
tf.namescope(‘namescope’)
和C++ 的namespace差不多。在tensorboard里面,同一个namescope是一个整体 -
add_to_collection就是把变量添加到对应key下的list中
-
exponential_decay指数衰减学习率,
-
def exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None):
decayed_learning_rate = learning_rate * decay_rate ^ (global_step / decay_steps) -
tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY, global_step)
滑动平均模型,它可以使得模型在测试数据上更健壮,在使用随机梯度下降算法训练神经网络时,通过滑动平均模型可以在很多的应用中在一定程度上提高最终模型在测试数据上的表现。其实滑动平均模型,主要是通过控制衰减率来控制参数更新前后之间的差距,从而达到减缓参数的变化值.滑动平均 -
control_dependencies(control_inputs)返回一个控制依赖的上下文管理器,指定某些操作执行的依赖关系。在执行某些op,tensor之前,某些op,tensor得首先被运行。博客1博客2
查看帮助文档
目前没有找到能像vs一样好用的直接go to definition的IDE所以,有一种办法可以即使查阅文档:
print(help(tf.***))能够像MATLAB一样help出来文档注释。
spyder有些可以转到定义,有些不可以。多试试,毕竟没有系统学Python就上了还是比较吃亏
Console忽略警告
import warnings
warnings.filterwarnings(“ignore”) # 关闭警告
saver = tf.train.Saver(max_to_keep)
保存模型的操作,设置存储模型的数量。
如果跑一遍epoch就存一次模型显然再大的硬盘都承受不住而且。保存早些时间的模型多数情况是没有意义的,这里可以指定保存的模型数量。保存新的,旧的就被删除。默认情况下。TF只保存5个
遇到的问题
TypeError: main() takes no arguments (1 given)
tf.app.run() 会调用main,但是会传进去一个参数,所以要在main()设置一个接收。如果不想这么做,就不要用tf.app.run(),而是直接用main()如图。这两个用法的差异可以参考:这篇博文
pip install 速度慢怎么办
pip从国外镜像安装包比较慢可以通过换成国内镜像源的方式解决。可以采用直接修改配置文件的方式解决。我比较喜欢采用pip install时候加指定url的方式。:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspider,这样就会从清华这边的镜像去安装pyspider库
国内源:
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/