Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 广播和连接不规则张量_Python_Tensorflow_Concatenation_Ragged_Ragged Tensors - Fatal编程技术网

Python 广播和连接不规则张量

Python 广播和连接不规则张量,python,tensorflow,concatenation,ragged,ragged-tensors,Python,Tensorflow,Concatenation,Ragged,Ragged Tensors,我有一个参差不齐的维度张量[批量大小、时间步长、嵌入尺寸]。我想用另一个形状张量的数据来扩充最后一个轴[批量大小,大小]。给定示例的每个时间步都会增加相同的值 如果每个例子中的张量都没有变化的时间步长,我可以简单地用tf重塑第二个张量。重复,然后使用tf.concat: 将tensorflow导入为tf #创建数据 #形状:[批量大小、时间步数、嵌入尺寸] emb=tf.常数([[1,2,3],[4,5,6],[[1,2,3],[0,0,0]] #形状:[批量大小,1,8月尺寸] aug=tf.

我有一个参差不齐的维度张量
[批量大小、时间步长、嵌入尺寸]
。我想用另一个形状张量的数据来扩充最后一个轴
[批量大小,大小]
。给定示例的每个时间步都会增加相同的值

如果每个例子中的张量都没有变化的
时间步长
,我可以简单地用
tf重塑第二个张量。重复
,然后使用
tf.concat

将tensorflow导入为tf
#创建数据
#形状:[批量大小、时间步数、嵌入尺寸]
emb=tf.常数([[1,2,3],[4,5,6],[[1,2,3],[0,0,0]]
#形状:[批量大小,1,8月尺寸]
aug=tf.常数([[8]],[[9]])
#海螺
aug=tf.重复(aug,emb.形状[1],轴=1)
emb_aug=tf.concat([emb,aug],axis=-1)
emb
参差不齐时,这种方法不起作用,因为
emb.shape[1]
是未知的,并且在不同的示例中有所不同:

# rag and remove padding
emb = tf.RaggedTensor.from_tensor(emb, padding=(0, 0, 0))

# reshape for augmentation - this doesn't work
aug = tf.repeat(aug, emb.shape[1], axis=1)
ValueError:尝试将不支持类型()的值(无)转换为张量

目标是创建一个参差不齐的张量
emb_aug
,如下所示:

<tf.RaggedTensor [[[1, 2, 3, 8], [4, 5, 6, 8]], [[1, 2, 3 ,9]]]>


有什么想法吗?

最简单的方法是使用将不规则张量变成正则张量,然后完成其余的解。我假设你需要张量保持不规则。关键是在你的不规则张量中找到每一批的数量,然后使用这些信息使你的增广张量不规则

示例

将tensorflow导入为tf
#资料
emb=tf.常数([[1,2,3],[4,5,6],[[1,2,3],[0,0,0]]
aug=tf.常数([[8]],[[9]])
#使嵌入件参差不齐以进行测试
emb_r=tf.RaggedTensor.from_张量(emb,padding=(0,0,0))
打印(emb_r.形状)
#(2、无、3)
这里我们将使用
行长度的组合
并创建一个新的参差不齐张量

#查找嵌入的行长度
rl=emb\u r.行长度()
打印(rl)
#tf.张量([21],shape=(2,),dtype=int64)
#查找最大行长度
max_rl=tf.math.reduce_max(rl)
打印(最大)
#tf.张量(2,shape=(),dtype=int64)
#重复增加的数据“max_rl”多次
8月t=tf.重复(8月,重复次数=max\u rl,轴=1)
打印(八月)
#tf张量(
# [[[8]
#   [8]]
# 
#  [[9]
#[9]]],shape=(2,2,1),dtype=int32)
#创建一个掩码
msk=tf.序列屏蔽(rl)
打印(msk)
#tf张量(
#[[真的]
#[True-False]],shape=(2,2),dtype=bool)
从这里,我们可以使用它使增强的数据参差不齐

#使扩充数据成为参差不齐的张量
aug\u r=tf.不规则布尔掩码(aug\u t,msk)
印刷品(八月)
# 
#连接!
输出=tf.concat([emb\u r,aug\u r],2)
打印(输出)
# 

您可以找到支持不规则张量的tensorflow方法列表

祝贺您,您的问题获得了我的第600票!:D