python - Tensorflow 连接未指定形状的张量
问题描述
我正在尝试连接两个张量。不幸的是,一些形状尺寸信息似乎在这个过程中丢失了。
我从形状为 [Batch, 3] 的张量(在我的情况下为平移姿势)开始,例如:pose_t
然后我将这个张量分成两个形状为 [Batch, 2] 和 [Batch] 的张量
centroid = pose_t[:,:2]
tz = pose_t [:,2]
然后我对尺寸更改为 [Batch,28,28,2] 的质心进行一些处理
最后,我想将处理后的质心张量和 tz 张量连接起来,得到一个形状为 [Batch, 28, 28, 3] 的pose_t张量
因此,我将 expand_dims() 应用于 tz 三次并平铺轴 1 和 2,之后我得到一个形状为 [1, 28, 28, ?] 的张量,尽管我想要/需要的是形状 [?,28,28, 1]
不幸的是,我认为在质心和 tz 中的pose_t 开始分裂期间,一些形状信息正在丢失:
第一个维度应该仍然是批次维度,但如果我输出形状,则在未定义之前,批次维度 [?,...] 设置为 1,其中之前定义的最后一个维度现在未定义。
不,我有连接形状 [?,28,28,2] 和 [1,28,28,?] 的张量的问题,这给了我一个错误。
完整代码如下:
# Process Centroid
cent_deltas = utils.compute_cent_deltas_graph(positive_rois, pose_t[:,0:2], config.MASK_SHAPE[0])
# Append tz from pose_t to cent_deltas in correct dimension
# Expand Dimension 3 times and scale each dimension to propper size
tz = pose_t[:,2]
tz = tf.tile(tf.expand_dims(tf.expand_dims(tf.expand_dims(tz,axis=0),axis=1),axis=2),multiples=[1,config.MASK_SHAPE[0], config.MASK_SHAPE[0],1])
pose_t = tf.concat([cent_deltas, tz],axis=3)
非常感谢所有帮助!谢谢
解决方案
毕竟expand_dims
,你的形状是[1, 1, 1, batch_size]
。平铺此形状保留batch_size
为最后一个维度。你只需要expand_dims
在最后,首先保持你的批次维度:
tz = tf.expand_dims(tz, axis=-1)
tz = tf.expand_dims(tz, axis=-1)
tz = tf.expand_dims(tz, axis=-1)
tz = tf.tile(tz, ...)
推荐阅读
- ubuntu - Ubuntu上有pamusb的替代品吗?
- angular - 如何避免在文件更改时重新编译?
- python - 在 Flask 中打开上传的照片
- python - 要指定列名,为什么在`pd.read_csv`和`pd.DataFrame`中使用相同的参数名称?
- node.js - 如何在 Windows 10 中更改 Node.js 网络权限?
- java - 使用单独类中定义的 Firebase 进行身份验证时出现 ClassCastExceptions
- search - TYPO3 9.5:indexed_search 不可用
- java - 每个循环中的百里香计数匹配(对象数组)
- php - octobercms 中同名的唯一 slug
- java - 根据 xpath 元素中其他属性的条件获取属性值