Tensorflow 是什么
Tensorflow是Google开源的一个深度学习库,可以建立计算的图模型和利用tensor结构在途中流动,这大概也是叫做tensorflow的主要原因。
Deep MNIST for Experts
1 | tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None) |
用来生成的正态分布的随机数。
然后引用 tensorflow库并加载数据1
2
3
4
5
6
7
from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
import argparse
import sys
GPUOption=tf.GPUOptions(allow_growth=True)
其中的最后一行让程序不会一次性把GPU所有的内存全部占用掉。
启动构建好的tensorflow计算图1
tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
main函数
先从tensorflow封装好的库中载入mnist的数据,然后建立两个placeholder来放置数据,1
2
3
4```
mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True)
x = tf.placeholder(tf.float32, [None, 784])
y_ = tf.placeholder(tf.float32, [None, 10])
然后我们要构建第一个卷积层,跟着卷积层的就是pool
tf.nn.conv2d
Computes a 2-D convolution given 4-D input and filter tensors.
Flattens the filter to a 2-D matrix with shape [filter_height filter_width in_channels, output_channels].
tf.nn.max_pool(value, ksize, strides, padding, data_format=’NHWC’, name=None)
执行pool操作,ksize表示滑动窗口的大小,是一个4d的窗口,而strides表示这个窗口在所有维度上的滑动步长。
tf.app.flags
这个是用来增加命令行的工具,同时还可以在全局传播。下面是train.py
的代码1
2
3
4
5
6
7
8
9
10
11
12# Settings
flags = tf.app.flags
FLAGS = flags.FLAGS
flags.DEFINE_string('dataset', 'cora', 'Dataset string.') # 'cora', 'citeseer', 'pubmed'
flags.DEFINE_string('model', 'gcn', 'Model string.') # 'gcn', 'gcn_cheby', 'dense'
flags.DEFINE_float('learning_rate', 0.01, 'Initial learning rate.')
flags.DEFINE_integer('epochs', 200, 'Number of epochs to train.')
flags.DEFINE_integer('hidden1', 16, 'Number of units in hidden layer 1.')
flags.DEFINE_float('dropout', 0.5, 'Dropout rate (1 - keep probability).')
flags.DEFINE_float('weight_decay', 5e-4, 'Weight for L2 loss on embedding matrix.')
flags.DEFINE_integer('early_stopping', 10, 'Tolerance for early stopping (# of epochs).')
flags.DEFINE_integer('max_degree', 3, 'Maximum Chebyshev polynomial degree.')
而在另一个在train.py
中被import的code中可以用下面的代码把flags取出来1
2flags = tf.app.flags
FLAGS = flags.FLAGS
tensorflow的数据类型
- tf.Tensor
- tf.Variable
- tf.constant
- tf.placeholder
- tf.SparseTensor
tf.get_variable
名字,数据,类型,初始化的方式,默认情况下是使用tf.glorot_uniform_initializer
来初始化。
指定到某个设备上1
2with tf.device("/device:GPU:1"):
v = tf.get_variable("v", [1])
在使用variable之前,必须要初始化,可以用一句话来初始化全部的网络1
session.run(tf.global_variables_initializer())
也可以自己定义初始化的op
tf.Graph
tensorflow的主要过程就是构建tf.Graph
,然后将数据放到tf.placeholder
中运行,然后从已经定义好的结果Node中取出数值。如果是训练的话是可以将可训练的tf.Variable
。tf.Operation
代表的是Node,而tf.Tensor
则是代表Edge。
tf.bidirectional_dynamic_rnn
这个layer返回的是两个tuple,第一个tuple是输出,表示每个时间步的(正向,方向)的输出。
第二个tuple是表示(cellstates,hiddenstates),注意的是hiddenstates是在第二个,同时表示的是正向的在最后一个时间步的输出和反向在第一个时间步的输出,这个和第一个返回结果不同。
如果是要当作encoder的话,需要使用hiddenstates
来表示正向和反向的结果,如果是用output的话,反向的输出只过了第一个字符。
tf.data
先是需要读入数据