TensorFlow学习——tf.space_to_batch函数用法解析

本文详细介绍了TensorFlow中SpaceToBatch函数的功能及使用方法。该函数通过零填充和重新排列空间数据块来改变张量的布局,适用于4维张量,常用于将空间信息转换到批量维度,以辅助实现特定的卷积操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tf.space_to_batch 函数

space_to_batch(
    input,
    paddings,
    block_size,
    name=None
)

定义在:tensorflow/python/ops/array_ops.py

参见指南:张量变换>分割和连接

用于 T 型的4维张量的 SpaceToBatch。

这是更一般的SpaceToBatchND的传统版本。

零填充,然后重新排列(permutes)的空间数据块成批。更具体地说,该操作会输出输入张量的副本,其中来自height维和width维的值将移至该batch维。在零填充之后,输入的height和width输入必须能被块大小整除。

函数参数

  • input:一个Tensor,是4-D的,并且具有形状[batch, height, width, depth]。
  • paddings:一个Tensor,必须是以下类型之一:int32,int64。具有形状的非负整数的二维张量[2, 2]。它在空间维度上用零指定输入的填充,如下所示:
    paddings = [[pad_top, pad_bottom], [pad_left, pad_right]]
    零填充输入张量的有效空间维度将是:
    height_pad = pad_top + height + pad_bottom 
    width_pad = pad_left + width + pad_right
    attr block_size 必须大于1。它表示块大小。
    • block_size x block size高度和宽度尺寸的非重叠块在每个位置重新排列为批量维度。
    • 输出张量的批次是batch * block_size * block_size。
    • height_pad和width_pad都必须被block_size整除。
    输出的形状将是:
  • [batch*block_size*block_size, height_pad/block_size, width_pad/block_size, depth] 
    一些例子:
    (1)对于以下输入的形状 [1, 2, 2, 1] 和 block_size 2:
    x = [[[[1], [2]], [[3], [4]]]]     
    输出张量具有形状[4, 1, 1, 1]和值:
    [[[[1]]], [[[2]]], [[[3]]], [[[4]]]]
    (2)对于以下输入的shape [1, 2, 2, 3]和block_size 2:
    x = [[[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]]
    输出张量具有形状[4, 1, 1, 3]和值:
    [[[1, 2, 3]], [[4, 5, 6]], [[7, 8, 9]], [[10, 11, 12]]]
    (3)对于以下输入的shape [1, 4, 4, 1]和block_size 2:
    x = [[[[1], [2], [3], [4]], [[5], [6], [7], [8]], [[9], [10], [11], [12]], [[13], [14], [15], [16]]]]
    输出张量具有形状[4, 2, 2, 1]和值:
    x = [[[[1], [3]], [[9], [11]]], [[[2], [4]], [[10], [12]]], [[[5], [7]], [[13], [15]]], [[[6], [8]], [[14], [16]]]]
    (4)对于以下输入的形状[2, 2, 4, 1]和block_size 2:
    x = [[[[1], [2], [3], [4]], [[5], [6], [7], [8]]], [[[9], [10], [11], [12]], [[13], [14], [15], [16]]]]                
    输出张量具有形状[8, 1, 2, 1]和值:
    x = [[[[1], [3]]], [[[9], [11]]], [[[2], [4]]], [[[10], [12]]], [[[5], [7]]], [[[13], [15]]], [[[6], [8]]], [[[14], [16]]]]
    在其他方面, 此操作有助于将 atrous 卷积减为常规卷积。block_size:是一个大于等于2的int。name:操作的名称(可选)。

函数返回

tf.space_to_batch函数返回一个与input具有相同的类型的Tensor。

参考:https://www.w3cschool.cn/tensorflow_python/tensorflow_python-wygr2kbg.html

https://tensorflow.google.cn/api_docs/python/tf/batch_to_space
import tensorflow as tf import numpy as np import matplotlib.pyplot as plt from carModel import CarEnvironment print("TensorFlow 版本:", tf.__version__) print("GPU 可用性:", tf.config.list_physical_devices('GPU')) # === 超参数 === EP_MAX = 1000 # 训练回合数 EP_LEN = 1800 # 每回合步长(与工况数据长度一致) GAMMA = 0.95 # 折扣因子 A_LR = 0.0001 # Actor学习率 C_LR = 0.0002 # Critic学习BATCH_SIZE = 128 # 训练批量大小 UPDATE_STEPS = 10 # 训练时,PPO的更新步数 EPSILON = 0.2 # PPO的裁剪系数 HIDDEN_UNITS = 128 # 隐藏层单元数 env = CarEnvironment() S_DIM = env.observation_space.shape[0] # 状态空间维度 A_DIM = env.action_space.shape[0] # 动作空间维度 A_BOUND = env.action_space.high # 动作边界 class PPOAgent: def __init__(self): # 配置GPU参数 config = tf.ConfigProto() config.gpu_options.allow_growth = True # 动态申请显存 config.gpu_options.visible_device_list = "0" # 使用第一个GPU self.sess = tf.Session(config=config) self._build_model() self.sess.run(tf.global_variables_initializer()) def _build_model(self): """ 建立 PPO 网络 """ # 1️⃣ **输入层** self.S = tf.placeholder(tf.float32, [None, S_DIM], 'state') self.A = tf.placeholder(tf.float32, [None, A_DIM], 'action') self.R = tf.placeholder(tf.float32, [None, 1], 'reward') self.advantage = tf.placeholder(tf.float32, [None, 1], 'advantage') # 2️⃣ **Critic(评估网络)** with tf.variable_scope('Critic'): c_hidden = tf.layers.dense(self.S, HIDDEN_UNITS, tf.nn.relu) self.v = tf.layers.dense(c_hidden, 1) self.critic_loss = tf.reduce_mean(tf.square(self.R - self.v)) self.critic_train_op = tf.train.AdamOptimizer(C_LR).minimize(self.critic_loss) # 3️⃣ **Actor(策略网络)** pi, pi_params = self._build_actor('pi', trainable=True) # 当前策略 oldpi, oldpi_params = self._build_actor('oldpi', trainable=False) # 旧策略
03-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值