尽管之前看了Tensorflow2.0的语法句,但总归还是不够熟练,在实践上总归是有点陌生,因此特地记录自己的一些感悟和理解。
import tensorflow as tf
from tensorflow import keras
import numpy as np
# 1. 去除维度
# 生成[1, 25, 25, 3]的维度
x = tf.reshape(tf.range(1, 1876), [1, 25, 25, 3])
# 去除中间维度
x = tf.reshape(x, [tf.shape(x)[0], -1, 3])
x = tf.cast(x, tf.float32)
# 2. softmax计算
# 方法:tf.nn.softmax(logits,axis=None,name=None,dim=None)
# logits:一个非空的Tensor。必须是下列类型之一:half, float32,float64
# axis:将在其上执行维度softmax。默认值为-1,表示最后一个维度
rpn_probs = tf.nn.softmax(x) # 每行为一组数据,在列维度计算softmax
rpn_probs1 = tf.nn.softmax(x, axis=1) # 每一列为一组数据,在行维度上计算softmax
# 3. 列表元素分裂
# 方法:zip(*)
# 例1
# 生成列表
layer_outputs = []
rpn_class_logits = tf.reshape(tf.range(1, 31), [2, 5, 3])
rpn_probs = tf.reshape(tf.range(32, 62), [2, 5, 3])
rpn_deltas = tf.reshape(tf.range(63, 93), [2, 5, 3])
# layer_outputs的格式为[[rpn_class_logits, rpn_probs, rpn_deltas]]
layer_outputs.append([rpn_class_logits, rpn_probs, rpn_deltas])
# 列表元素分裂
outputs = list(zip(*layer_outputs)) # 格式为[(rpn_class_logits), (rpn_probs), (rpn_deltas)]
outputs1 = [list(o) for o in outputs] # 格式为[[rpn_class_logits], [rpn_probs], [rpn_deltas]]
outputs2 = [tf.concat(list(o), axis=1) for o in outputs] # 格式为[rpn_class_logits, rpn_probs, rpn_deltas]
# 例2
a = [1, 2, 3]
b = [