轉載: https://blog.csdn.net/lenbow/article/details/52152766
1、tensorflow的基本運作
為了快速的熟悉TensorFlow編程,下面從一段簡單的代碼開始:
importtensorflow
astf
#定義‘符號’變量,也稱為占位符
a = tf.placeholder(
"float")
b = tf.placeholder(
"float")
y = tf.mul(a, b)
#構造一個op節點
sess = tf.Session()
#建立會話
#運行會話,輸入數據,並計算節點,同時打印結果
sess.run(y, feed_dict={a:
3, b:
3})
# 任務完成, 關閉會話.
sess.close()
其中tf.mul(a, b)函數便是tf的一個基本的算數運算,接下來介紹跟多的相關函數。
2、tf函數
TensorFlow
將圖形定義轉換成分布式執行的操作
,
以充分利用可用的計算資源
(
如
CPU
或
GPU
。一般你不需要顯式指定使用
CPU
還是
GPU, TensorFlow
能自動檢測。如果檢測到
GPU, TensorFlow
會盡可能地利用找到的第一個
GPU
來執行操作
.
並行計算能讓代價大的算法計算加速執行,
TensorFlow
也在實現上對復雜操作進行了有效的改進。大部分核相關的操作都是設備相關的實現,比如
GPU
。下面是一些重要的操作
/
核:
操作組 |
操作 |
Maths |
Add, Sub, Mul, Div, Exp, Log, Greater, Less, Equal |
Array |
Concat, Slice, Split, Constant, Rank, Shape, Shuffle |
Matrix |
MatMul, MatrixInverse, MatrixDeterminant |
Neuronal Network |
SoftMax, Sigmoid, ReLU, Convolution2D, MaxPool |
Checkpointing |
Save, Restore |
Queues and syncronizations |
Enqueue, Dequeue, MutexAcquire, MutexRelease |
Flow control |
Merge, Switch, Enter, Leave, NextIteration |
TensorFlow的算術操作如下:
操作 |
描述 |
tf.add(x, y, name=None) |
求和 |
tf.sub(x, y, name=None) |
減法 |
tf.mul(x, y, name=None) |
乘法 |
tf.div(x, y, name=None) |
除法 |
tf.mod(x, y, name=None) |
取模 |
tf.abs(x, name=None) |
求絕對值 |
tf.neg(x, name=None) |
取負 (y = -x). |
tf.sign(x, name=None) |
返回符號 y = sign(x) = -1 if x < 0; 0 if x == 0; 1 if x > 0. |
tf.inv(x, name=None) |
取反 |
tf.square(x, name=None) |
計算平方 (y = x * x = x^2). |
tf.round(x, name=None) |
舍入最接近的整數 |
tf.sqrt(x, name=None) |
開根號 (y = \sqrt{x} = x^{1/2}). |
tf.pow(x, y, name=None) |
冪次方 |
tf.exp(x, name=None) |
計算e的次方 |
tf.log(x, name=None) |
計算log,一個輸入計算e的ln,兩輸入以第二輸入為底 |
tf.maximum(x, y, name=None) |
返回最大值 (x > y ? x : y) |
tf.minimum(x, y, name=None) |
返回最小值 (x < y ? x : y) |
tf.cos(x, name=None) |
三角函數cosine |
tf.sin(x, name=None) |
三角函數sine |
tf.tan(x, name=None) |
三角函數tan |
tf.atan(x, name=None) |
三角函數ctan |
張量操作Tensor Transformations
- 數據類型轉換Casting
操作 |
描述 |
tf.string_to_number |
字符串轉為數字 |
tf.to_double(x, name=’ToDouble’) |
轉為64位浮點類型–float64 |
tf.to_float(x, name=’ToFloat’) |
轉為32位浮點類型–float32 |
tf.to_int32(x, name=’ToInt32’) |
轉為32位整型–int32 |
tf.to_int64(x, name=’ToInt64’) |
轉為64位整型–int64 |
tf.cast(x, dtype, name=None) |
將x或者x.values轉換為dtype |
- 形狀操作Shapes and Shaping
操作 |
描述 |
tf.shape(input, name=None) |
返回數據的shape |
tf.size(input, name=None) |
返回數據的元素數量 |
tf.rank(input, name=None) |
返回tensor的rank |
tf.reshape(tensor, shape, name=None) |
改變tensor的形狀 |
tf.expand_dims(input, dim, name=None) |
插入維度1進入一個tensor中 |
- 切片與合並(Slicing and Joining)
操作 |
描述 |
tf.slice(input_, begin, size, name=None) |
對tensor進行切片操作 |
tf.split(split_dim, num_split, value, name=’split’) |
沿着某一維度將tensor分離為num_split tensors |
tf.concat(concat_dim, values, name=’concat’) |
沿着某一維度連結tensor |
tf.pack(values, axis=0, name=’pack’) |
將一系列rank-R的tensor打包為一個rank-(R+1)的tensor |
tf.reverse(tensor, dims, name=None) |
沿着某維度進行序列反轉 |
tf.transpose(a, perm=None, name=’transpose’) |
調換tensor的維度順序 |
tf.gather(params, indices, validate_indices=None, name=None) |
合並索引indices所指示params中的切片 |
tf.one_hot |
indices = [0, 2, -1, 1] |
矩陣相關運算
操作 |
描述 |
tf.diag(diagonal, name=None) |
返回一個給定對角值的對角tensor |
tf.diag_part(input, name=None) |
功能與上面相反 |
tf.trace(x, name=None) |
求一個2維tensor足跡,即對角值diagonal之和 |
tf.transpose(a, perm=None, name=’transpose’) |
調換tensor的維度順序 |
tf.matmul(a, b, transpose_a=False, |
矩陣相乘 |
tf.matrix_determinant(input, name=None) |
返回方陣的行列式 |
tf.matrix_inverse(input, adjoint=None, name=None) |
求方陣的逆矩陣,adjoint為True時,計算輸入共軛矩陣的逆矩陣 |
tf.cholesky(input, name=None) |
對輸入方陣cholesky分解, |
tf.matrix_solve(matrix, rhs, adjoint=None, name=None) |
求解tf.matrix_solve(matrix, rhs, adjoint=None, name=None) |
復數操作
操作 |
描述 |
tf.complex(real, imag, name=None) |
將兩實數轉換為復數形式 |
tf.complex_abs(x, name=None) |
計算復數的絕對值,即長度。 |
tf.conj(input, name=None) |
計算共軛復數 |
tf.imag(input, name=None) |
提取復數的虛部和實部 |
tf.fft(input, name=None) |
計算一維的離散傅里葉變換,輸入數據類型為complex64 |
歸約計算(Reduction)
操作 |
描述 |
tf.reduce_sum(input_tensor, reduction_indices=None, |
計算輸入tensor元素的和,或者安照reduction_indices指定的軸進行求和 |
tf.reduce_prod(input_tensor, |
計算輸入tensor元素的乘積,或者安照reduction_indices指定的軸進行求乘積 |
tf.reduce_min(input_tensor, |
求tensor中最小值 |
tf.reduce_max(input_tensor, |
求tensor中最大值 |
tf.reduce_mean(input_tensor, |
求tensor中平均值 |
tf.reduce_all(input_tensor, |
對tensor中各個元素求邏輯’與’ |
tf.reduce_any(input_tensor, |
對tensor中各個元素求邏輯’或’ |
tf.accumulate_n(inputs, shape=None, |
計算一系列tensor的和 |
tf.cumsum(x, axis=0, exclusive=False, |
求累積和 |
分割(Segmentation)
操作 |
描述 |
tf.segment_sum(data, segment_ids, name=None) |
根據segment_ids的分段計算各個片段的和 |
tf.segment_prod(data, segment_ids, name=None) |
根據segment_ids的分段計算各個片段的積 |
tf.segment_min(data, segment_ids, name=None) |
根據segment_ids的分段計算各個片段的最小值 |
tf.segment_max(data, segment_ids, name=None) |
根據segment_ids的分段計算各個片段的最大值 |
tf.segment_mean(data, segment_ids, name=None) |
根據segment_ids的分段計算各個片段的平均值 |
tf.unsorted_segment_sum(data, segment_ids, |
與tf.segment_sum函數類似, |
tf.sparse_segment_sum(data, indices, |
輸入進行稀疏分割求和 |
序列比較與索引提取(Sequence Comparison and Indexing)
操作 |
描述 |
tf.argmin(input, dimension, name=None) |
返回input最小值的索引index |
tf.argmax(input, dimension, name=None) |
返回input最大值的索引index |
tf.listdiff(x, y, name=None) |
返回x,y中不同值的索引 |
tf.where(input, name=None) |
返回bool型tensor中為True的位置 |
tf.unique(x, name=None) |
返回一個元組tuple(y,idx),y為x的列表的唯一化數據列表, |
tf.invert_permutation(x, name=None) |
置換x數據與索引的關系 |
神經網絡(Neural Network)
- 激活函數(Activation Functions)
操作 |
描述 |
tf.nn.relu(features, name=None) |
整流函數:max(features, 0) |
tf.nn.relu6(features, name=None) |
以6為閾值的整流函數:min(max(features, 0), 6) |
tf.nn.elu(features, name=None) |
elu函數,exp(features) - 1 if < 0,否則features |
tf.nn.softplus(features, name=None) |
計算softplus:log(exp(features) + 1) |
tf.nn.dropout(x, keep_prob, |
計算dropout,keep_prob為keep概率 |
tf.nn.bias_add(value, bias, data_format=None, name=None) |
對value加一偏置量 |
tf.sigmoid(x, name=None) |
y = 1 / (1 + exp(-x)) |
tf.tanh(x, name=None) |
雙曲線切線激活函數 |
- 卷積函數(Convolution)
操作 |
描述 |
tf.nn.conv2d(input, filter, strides, padding, |
在給定的4D input與 filter下計算2D卷積 |
tf.nn.conv3d(input, filter, strides, padding, name=None) |
在給定的5D input與 filter下計算3D卷積 |
- 池化函數(Pooling)
操作 |
描述 |
tf.nn.avg_pool(value, ksize, strides, padding, |
平均方式池化 |
tf.nn.max_pool(value, ksize, strides, padding, |
最大值方法池化 |
tf.nn.max_pool_with_argmax(input, ksize, strides, |
返回一個二維元組(output,argmax),最大值pooling,返回最大值及其相應的索引 |
tf.nn.avg_pool3d(input, ksize, strides, |
3D平均值pooling |
tf.nn.max_pool3d(input, ksize, strides, |
3D最大值pooling |
- 數據標准化(Normalization)
操作 |
描述 |
tf.nn.l2_normalize(x, dim, epsilon=1e-12, name=None) |
對維度dim進行L2范式標准化 |
tf.nn.sufficient_statistics(x, axes, shift=None, |
計算與均值和方差有關的完全統計量 |
tf.nn.normalize_moments(counts, mean_ss, variance_ss, shift, name=None) |
基於完全統計量計算均值和方差 |
tf.nn.moments(x, axes, shift=None, |
直接計算均值與方差 |
- 損失函數(Losses)
操作 |
描述 |
tf.nn.l2_loss(t, name=None) |
output = sum(t ** 2) / 2 |
- 分類函數(Classification)
操作 |
描述 |
tf.nn.sigmoid_cross_entropy_with_logits |
計算輸入logits, targets的交叉熵 |
tf.nn.softmax(logits, name=None) |
計算softmax |
tf.nn.log_softmax(logits, name=None) |
logsoftmax[i, j] = logits[i, j] - log(sum(exp(logits[i]))) |
tf.nn.softmax_cross_entropy_with_logits |
計算logits和labels的softmax交叉熵 |
tf.nn.sparse_softmax_cross_entropy_with_logits |
計算logits和labels的softmax交叉熵 |
tf.nn.weighted_cross_entropy_with_logits |
與sigmoid_cross_entropy_with_logits()相似, |
- 符號嵌入(Embeddings)
操作 |
描述 |
tf.nn.embedding_lookup |
根據索引ids查詢embedding列表params中的tensor值 |
tf.nn.embedding_lookup_sparse(params, |
對給定的ids和權重查詢embedding |
- 循環神經網絡(Recurrent Neural Networks)
操作 |
描述 |
tf.nn.rnn(cell, inputs, initial_state=None, dtype=None, |
基於RNNCell類的實例cell建立循環神經網絡 |
tf.nn.dynamic_rnn(cell, inputs, sequence_length=None, |
基於RNNCell類的實例cell建立動態循環神經網絡 |
tf.nn.state_saving_rnn(cell, inputs, state_saver, state_name, |
可儲存調試狀態的RNN網絡 |
tf.nn.bidirectional_rnn(cell_fw, cell_bw, inputs, |
雙向RNN, 返回一個3元組tuple |
— tf.nn.rnn簡要介紹—
cell: 一個RNNCell實例
inputs: 一個shape為[batch_size, input_size]的tensor
initial_state: 為RNN的state設定初值,可選
sequence_length:制定輸入的每一個序列的長度,size為[batch_size],值范圍為[0, T)的int型數據
其中T為輸入數據序列的長度
@
@針對輸入batch中序列長度不同,所設置的動態計算機制
@對於在時間t,和batch的b行,有
(output, state)(b, t) = ? (zeros(cell.output_size), states(b, sequence_length(b) - 1)) : cell(input(b, t), state(b, t - 1))
- 求值網絡(Evaluation)
操作 |
描述 |
tf.nn.top_k(input, k=1, sorted=True, name=None) |
返回前k大的值及其對應的索引 |
tf.nn.in_top_k(predictions, targets, k, name=None) |
返回判斷是否targets索引的predictions相應的值 |
對於有巨大量的多分類與多標簽模型,如果使用全連接softmax將會占用大量的時間與空間資源,所以采用候選采樣方法僅使用一小部分類別與標簽作為監督以加速訓練。
操作 |
描述 |
Sampled Loss Functions |
|
tf.nn.nce_loss(weights, biases, inputs, labels, num_sampled, |
返回noise-contrastive的訓練損失結果 |
tf.nn.sampled_softmax_loss(weights, biases, inputs, labels, |
返回sampled softmax的訓練損失 |
Candidate Samplers |
|
tf.nn.uniform_candidate_sampler(true_classes, num_true, |
通過均勻分布的采樣集合 |
tf.nn.log_uniform_candidate_sampler(true_classes, num_true, |
通過log均勻分布的采樣集合,返回三元tuple |
tf.nn.learned_unigram_candidate_sampler |
根據在訓練過程中學習到的分布狀況進行采樣 |
tf.nn.fixed_unigram_candidate_sampler(true_classes, num_true, |
基於所提供的基本分布進行采樣 |
保存與恢復變量
操作 |
描述 |
類tf.train.Saver(Saving and Restoring Variables) |
|
tf.train.Saver.__init__(var_list=None, reshape=False, |
創建一個存儲器Saver |
tf.train.Saver.save(sess, save_path, global_step=None, |
保存變量 |
tf.train.Saver.restore(sess, save_path) |
恢復變量 |
tf.train.Saver.last_checkpoints |
列出最近未刪除的checkpoint 文件名 |
tf.train.Saver.set_last_checkpoints(last_checkpoints) |
設置checkpoint文件名列表 |
tf.train.Saver.set_last_checkpoints_with_time(last_checkpoints_with_time) |
設置checkpoint文件名列表和時間戳 |