Given a Sequence with a __getitem__ that returns x, y where x, y are of type list containing dictionaries that specify the input, output. For example:
x = [
{ 'input_1': 4123, .... },
{ 'input_1': 1123, .... }
]
y = [
{ 'output_1': 4123, .... },
{ 'output_1': 4123, .... }
]
model.fit cannot infer the shape of the generator. The error that I am getting:
File "..../site-packages/keras/utils/traceback_utils.py", line 70, in error_handler
raise e.with_traceback(filtered_tb) from None
File ".../site-packages/keras/engine/data_adapter.py", line 890, in __init__
self._first_batch_size = int(tf.nest.flatten(peek)[0].shape[0])
AttributeError: 'float' object has no attribute 'shape'
So I investigated the GeneratorDataAdapter class that the error was raised from.
It’s peeking at the first batch and doing the following on it:
self._first_batch_size = int(tf.nest.flatten(peek)[0].shape[0])
It’s making the assumption that the batch you get is of type numpy.array since tf.nest.flatten(peek)[0] is looking at x and x is of type list which doesn’t change to numpy.array when tensorflow.nest.flatten is called on it afaik (?)
I can’t manually convert x, y to a numpy.array either within the generator because they contain named inputs, outputs in the form of dictionaries as shown in the example in the beginning.
Is there a workaround for this?