我正在为keras中的序列到序列问题编写VAE。解码器是一个自动回归模型,所以我有两个不同的输入,一个用于编码器,另一个用于解码器(偏移 1,但这不是问题(。 我还想做数据增强,所以我决定使用 fit_generator(( 方法,但我在返回两个输入时遇到了一些问题。
我尝试返回两个输入向量的列表,如下所示
class DataGenerator(Sequence):
def __init__(....
def __getitem__(self, index):
data = create_data()
return [data, data]
或像这样的字典
return {"encoder_input_name" : "data, decoder_input_name" : data }
其中数据是形状(batch_size、max_sequence_len input_dimention(的 numpy 张量。
我不能只使用相同的输入层,因为稍后两个输入会有点不同,正如我所说,解码器输入将因第一个元素不同和其他原因而移动。
当我返回列表 [数据,数据] 或出现此错误时:
ValueError: Error when checking model input: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 2 array(s), but instead got the following list of 1 arrays
当我返回字典时,出现此错误:
batch_size = x.shape[0]
AttributeError: 'str' object has no attribute 'shape'
如何解决此问题?
谢谢!
编辑
我将__getitem__
的输出更改为[inpuut_1, input_2], []
,它奏效了。
你应该从生成器/序列实例返回一个元组。元组的第一个元素是输入数组的列表(如果模型有一个输入层,则只有一个数组(,第二个元素是输出数组的列表(如果模型有一个输出层,则只有一个数组(。
因此,__getitem__
应返回如下内容:
def __getitem__(self, index):
# ...
return [inp_arr1, inp_arr2, ...], [out_arr1, out_arr2, ...] # IMPORTANT: this is a tuple