zoukankan      html  css  js  c++  java
  • 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正则项的值

     

  • 相关阅读:
    Java读源码之ReentrantLock(2)
    Java读源码之ReentrantLock
    Java8新特性之Stream
    Spring Cloud Contract 微服务契约测试
    Springboot + 持久层框架JOOQ
    Groovy语法糖以及DSL
    Java自定义注解
    Java8新特性之接口defualt,static方法
    Nginx + uWSGI + Python + Django构建必应高清壁纸站
    Kafka,RocketMQ,RabbitMQ部署与使用体验
  • 原文地址:https://www.cnblogs.com/DianeSoHungry/p/7196172.html
Copyright © 2011-2022 走看看