我是靠谱客的博主 懵懂荔枝,最近开发中收集的这篇文章主要介绍修改TF.tensor中的值,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

方法一:

# 改变 tf.Tensor中的一个 3*3 矩阵: 重新赋值 temp
temp = final[i:i + 3, j:j +3] + (lambd * final[i + 1, j + 1])*window 
# 切片 4 部分
top_section = final[0:i, :]  # top
behind_section = final[i + 3:, :]  # behind
left_section = final[i:i + 3, 0:j]  # left
right_section = final[i:i + 3, j + 3:]  # right
mid_section = tf.concat([left_section, temp, right_section], axis=1)  # 左 中 右
final = tf.concat([top_section, mid_section, behind_section], axis=0) # 上 中 下

方法二:

def tensor_assign_2D(tensor_input, position, value):
    '''
    给 2D tensor的特定位置元素赋值
    tensor_input: 输入的2D tensor,目前只支持2D
    position: 被赋值的张量元素的坐标位置,=【h_index,w_index】
    '''
    shape = tensor_input.get_shape().as_list()
    height = shape[0]
    width = shape[1]
    h_index = position[0]
    w_index = position[1]
    one_hot_matrix = get_one_hot_matrix(height, width, position)
    new_tensor = tensor_input - tensor_input[h_index, w_index] * one_hot_matrix + one_hot_matrix * value
    return new_tensor
def get_one_hot_matrix(height, width, position):
    '''
    生成一个 one_hot矩阵,shape=【height*width】,在position处的元素为1,其余元素为0
    position: 格式为【h_Index,w_Index】,h_Index,w_Index为int格式
    '''
    col_length = height
    row_length = width
    col_one_position = position[0]
    row_one_position = position[1]
    rows_num = height
    cols_num = width

    single_row_one_hot = tf.one_hot(row_one_position, row_length, dtype=tf.float32)
    single_col_one_hot = tf.one_hot(col_one_position, col_length, dtype=tf.float32)

    one_hot_rows = tensor_expand(single_row_one_hot, rows_num)
    one_hot_cols = tensor_expand(single_col_one_hot, cols_num)
    one_hot_cols = tf.transpose(one_hot_cols)

    one_hot_matrx = one_hot_rows * one_hot_cols
    return one_hot_matrx

 张量自我复制扩展:

def tensor_expand(tensor_Input, Num):
    '''
    张量自我复制扩展,将Num个tensor_Input串联起来,生成新的张量,
    新的张量的shape=[tensor_Input.shape, Num]
    '''
    tensor_Input = tf.expand_dims(tensor_Input, axis=0)
    tensor_Output = tensor_Input
    for i in range(Num - 1):
        tensor_Output = tf.concat([tensor_Output, tensor_Input], axis=0)
    return tensor_Output

将Num个tensor_Input串联起来,生成新的张量,新的张量的shape=[tensor_Input.shape, Num]

 

测试:

if __name__ == "__main__":
    ##test
    tensor_input = tf.constant([i for i in range(20)], tf.float32)
    tensor_input = tf.reshape(tensor_input, [4, 5])
    new_tensor = tensor_assign_2D(tensor_input, [2, 3], final2[1,1])
    print(new_tensor.eval())

    sess = tf.Session()
    opt = tf.global_variables_initializer()
    sess.run(opt)
    sess.run(temp)

 

最后

以上就是懵懂荔枝为你收集整理的修改TF.tensor中的值的全部内容,希望文章能够帮你解决修改TF.tensor中的值所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(85)

评论列表共有 0 条评论

立即
投稿
返回
顶部