TensorFlow——零碎语法知识点

张量(tensor)

张量

是图中计算节点的运算结果的引用,由name,shape,type三个属性构成。

张量的命名

可以以“name:src_output”的形式给出,node为计算节点名称,src_output表示当前张量来自节点的第几个输出

张良的优点

1. 提高代码可读性

2. 方便获取中间结果

3. 用来获得计算结果(通过tf.Session.run(某张量))

会话(session)

通过python上下文管理器来管理会话

with tf.Session() as sess:
    pass
    sess.run(...)

将所有计算放在“with”中,可以避免由于忘记或异常导致无法调用“某会话.close()”,从而造成的资源泄露。

指定某会话为默认会话

sess = tf.Session()
with sess.as_default():
    pass
    print(result.eval())

 上面代码的作用类似于:

sess = tf.Session()
pass
print(sess.run(某张量))

或者

sess = tf.Session()
pass
print(某张量.eval(session=sess))

但省略了每一次计算都要显式地说明会话的繁琐。 

在交互式环境下,指定默认会话

例如在jupyter中,可以这样指定默认对话

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函数来达到一次性初始化左右变量的作用。

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。其作用看代码就知道了。

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正则项的值

 

原文地址:https://www.cnblogs.com/DianeSoHungry/p/7196172.html