TensorFlow——零碎语法知识点
张量(tensor)
张量
是图中计算节点的运算结果的引用,由name,shape,type三个属性构成。
张量的命名
可以以“name:src_output”的形式给出,node为计算节点名称,src_output表示当前张量来自节点的第几个输出
张良的优点
1. 提高代码可读性
2. 方便获取中间结果
3. 用来获得计算结果(通过tf.Session.run(某张量))
会话(session)
通过python上下文管理器来管理会话
1 2 3 | with tf.Session() as sess: pass sess.run(...) |
将所有计算放在“with”中,可以避免由于忘记或异常导致无法调用“某会话.close()”,从而造成的资源泄露。
指定某会话为默认会话
1 2 3 4 | sess = tf.Session() with sess.as_default(): pass print (result. eval ()) |
上面代码的作用类似于:
1 2 3 | sess = tf.Session() pass print (sess.run(某张量)) |
或者
1 2 3 | sess = tf.Session() pass print (某张量. eval (session = sess)) |
但省略了每一次计算都要显式地说明会话的繁琐。
在交互式环境下,指定默认会话
例如在jupyter中,可以这样指定默认对话
1 2 3 4 | sess = tf.InteractiveSession() pass print (某张量. eval ()) sess.close() |
变量
TensorFlow用变量来存储神经网络中的参数。通过w=tf.Variable()来声明,声明时,要指明初始化该变量的方法,如w=tf.Variable(random_normal([2,3],stdev=2))。
定义好变量后,在会话中,不要忘了初始化该变量,如sess.run(w.initializer)。常量不需要初始化,但是变量不能少了初始化的过程。
批量初始化变量
为了避免一次初始化一个变量,可以在会话中通过tf.initialize_all_variables函数来达到一次性初始化左右变量的作用。
1 2 | init_op = tf.initialze_all_variables() sess.run(init_op) |
tf.nn.softmax_cross_entropy_with_logits(y, y_)
tensorflow将交叉熵和softmax回归进行了统一封装。y为原始神经网络的输出结果,y_为标准答案,通过这个函数得到使用了softmax回归后的交叉熵
tf.clip_by_value(张量,元素下限a,元素上限b)
将张量元素中低于a的变为a,高于b的变为b。可以用来避免log0的情况
tf.nn.softmax_cross_entropy_with_logits(y,y_)
求y与softmax(y_)的交叉熵,这里的with_logits指的是y_为神经网络的输出。
在只有一个正确答案的的分类问题中,用tf.nn.sparse_softmax_cross_entropy_with_logits(y,y_)能计算快一些
tf.contrib.learn.preprocessing.VocabularyProcessor(max_sequence_length, min_frequency)
定义一个VocabularyProcessor。其作用看代码就知道了。
1 2 3 4 5 6 7 8 9 10 11 12 | from tensorflow.contrib import learn import numpy as np max_document_length = 4 x_text = [ 'i love you' , 'me too if you do' ] vocab_processor = learn.preprocessing.VocabularyProcessor(max_document_length) vocab_processor.fit(x_text) print (x) print ( next (vocab_processor.transform([ 'i me too do' ])).tolist()) x = np.array( list (vocab_processor.fit_transform(x_text))) |
结果:
[[1 2 3 0]
[4 5 6 3]]
[1, 4, 5, 6]
可以发现:超出最大序列长度的部分被截断,没到最大长度的用0填补。
正则化(regularization)
用来避免过拟合现象,在代价方程中往往加入正则项R(w)。正则项中不包含偏置项。正则项有两种,一种是权值的平方和(L2正则化项),一种是权值的绝对值之和(L1正则项)。L1正则项会让参数变得更稀疏,所以可以用起到特征选取的功能。tensorflow中提供了tf.contrib.layers.l2_regularizer()函数,他可以返回一个函数,这个函数可以计算一个给定参数的L2正则项的值。类似的可以用tf.contrib.layers.l1_regularizer()来求L1正则项的值
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步