我如何在tensorflow中轻松将元组numpy转换为元组张量

问题描述

我有元组numpy(具有len 4,5,6或更多),如何使用以下输入将元组numpy转换为元组张量:

import tensorflow as tf
import numpy as np
a = np.array([[20,20],[40,40]],dtype=np.int32)
b = np.array([[20,20,40,40],[60,60,60]],dtype=np.int32)
c = np.array([[20,dtype=np.int32)
d = np.array([[20,dtype=np.int32)
e = (a,b,c,d) # e is numpy tensor i want convert to tensor
tf_shapes = ((None,2),(None,3),(2,(3,3))
tf_types = (tf.int64,tf.float32,tf.int64,tf.float32)

我必须编写一个生成器以将其转换为元组张量

def data_generator():
    for i in range(16):
        yield a,d
dataset=tf.data.Dataset.from_generator(data_generator,tf_types,tf_shapes).batch(batch_size=4,drop_remainder=True)
for sample in dataset:
     res = model(sample,training=False)

如何不使用tfdata生成器直接获取示例。

解决方法

我不确定我是否正确理解了您的问题,但是看来您只是想将abcd转换为tensorflow张量,而不必使用tf.data.Dataset.from_generator函数。 在这种情况下,您只需使用tf.convert_to_tensor

import tensorflow as tf
import numpy as np

a_tensor = tf.convert_to_tensor(a,np.int32)
b_tensor = tf.convert_to_tensor(b,np.int32)
c_tensor = tf.convert_to_tensor(c,np.int32)
d_tensor = tf.convert_to_tensor(d,np.int32)

# use the tensors however you want

此外,如果您想在代码中使用类似于e的张量,请执行以下操作:

e_tensor = tf.stack(e,axis=0)
# e_tensor[0] == a_tensor,e_tensor[1] == b_tensor,...