TensorFlow入门(一)

一、TensorFlow基本概念

1.张量(Tensor):张量是数学的一个分支学科,发展起源和历史请自行百度。在TensorFlow里,张量是矢量的扩展,张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数。例如,①3.14,标量,0维;②[1,2,3],矢量,1维数组,1阶张量;③[1,2,3;4,5,6;7,8,9],二维矩阵,2维数组,2阶张量;以此类推,张量可以扩展到n维矩阵,n阶张量。


2.计算图(Graph)

计算图生成的过程,就是模型定义的过程。计算图是静态的。

如训练模型为Y=aX+b,则其计算图为:


很容易看清,计算图就是一个静态的计算过程,其中各个节点是一个变量或一个计算,而节点之间的边描述了计算之间的依赖关系。整个过程可以看作是数据流动的过程。

这里说计算图是静态的,是因为在使用TensorFlow框架编程以进行模型训练时,模型定义即定义计算图的过程,仅仅只是定义,不做任何计算,实际计算过程通过会话(Session)完成。

当然,实际模型会比这个模型复杂很多,因此在模型很复杂的情况下,计算图就会起到梳理思路的作用,通过TensorBoard可视化工具即可查看实际模型的计算图。


3.会话(Session)


我们用python语言(当然也可以使用其他语言如java、go、c等)构建出计算图后,通过Session去执行计算任务。

例如:

pred = RNN(x, istate, weights, biases)

# 定义损失和优化方法,其中算是为softmax交叉熵,优化方法为Adam
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))  # Softmax loss
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)  # Adam Optimizer

# 进行模型的评估,argmax是取出取值最大的那一个的标签作为输出
correct_pred = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))

# 初始化
init = tf.initialize_all_variables()

# 开始运行
with tf.Session() as sess:
    sess.run(init)
    step = 1
    # 持续迭代
    while step * batch_size < training_iters:
        # 随机抽出这一次迭代训练时用的数据
        batch_xs, batch_ys = mnist.train.next_batch(batch_size)
        # 对数据进行处理,使得其符合输入
        batch_xs = batch_xs.reshape((batch_size, n_steps, n_input))
        # 迭代
        sess.run(optimizer, feed_dict={x: batch_xs, y: batch_ys,
                                       istate: np.zeros((batch_size, 2 * n_hidden))})
        # 在特定的迭代回合进行数据的输出
        if step % display_step == 0:
            # Calculate batch accuracy
            acc = sess.run(accuracy, feed_dict={x: batch_xs, y: batch_ys,
                                                istate: np.zeros((batch_size, 2 * n_hidden))})
            # Calculate batch loss
            loss = sess.run(cost, feed_dict={x: batch_xs, y: batch_ys,
                                             istate: np.zeros((batch_size, 2 * n_hidden))})
            print "Iter " + str(step * batch_size) + ", Minibatch Loss= " + "{:.6f}".format(loss) + \
                  ", Training Accuracy= " + "{:.5f}".format(acc)
        step += 1
    print "Optimization Finished!"
    # 载入测试集进行测试
    test_len = 256
    test_data = mnist.test.images[:test_len].reshape((-1, n_steps, n_input))
    test_label = mnist.test.labels[:test_len]
    print "Testing Accuracy:", sess.run(accuracy, feed_dict={x: test_data, y: test_label,istate: np.zeros((test_len, 2 * n_hidden))})

with tf.Session() as sess以上的部分,都是在定义计算图,一下的部分才是实际开始去执行训练任务。

二、基础知识

1.tf.Variable(initializer,name):initializer是初始化参数,name是变量名。

主要用于一些可训练变量,例如模型权重或者偏置。

声明时,必须提供初始值。


与tf.Variable相关的还有:

tf.variable_scope():提供了简单的命名空间技术避免冲突。

tf.get_variable():从同一个变量范围内获得或创建,与tf.Variable有相似的地方,也有自己独有的特点。

详细信息请参考:tf.get_variable() vs tf.Variable(),tf.name_scope() vs tf.variable_scope()

2.tf.placeholder(type,shape,name):参数分别表示数据类型、维度、名字。

主要用于得到传递进来的真实样本

不必指定初始值,可在运行时通过Session.run的函数feed_dict参数指定,它仅仅作为一种占位符。

3.with语句:

with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等。

详细信息请参考:浅谈 Python 的 with 语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值