Python 如何使用Tensorflow BatchDataset训练模型?

Python 如何使用Tensorflow BatchDataset训练模型?,python,tensorflow,machine-learning,keras,deep-learning,Python,Tensorflow,Machine Learning,Keras,Deep Learning,我试图在Tensorflow(2.4.1)中训练一个具有两个输入的模型。为此,我有一个批处理数据集,例如tensor: {'spectrogram': <tf.Tensor: shape=(7811, 129, 1), dtype=float32, numpy= array([[[0.], [0.], [0.], ..., [0.], [0.], [0.]]], dtype=float32)&g

我试图在Tensorflow(2.4.1)中训练一个具有两个输入的模型。为此,我有一个批处理数据集,例如tensor:

{'spectrogram': <tf.Tensor: shape=(7811, 129, 1), dtype=float32, numpy=
array([[[0.],
        [0.],
        [0.],
        ...,
        [0.],
        [0.],
        [0.]]], dtype=float32)>, 'label': <tf.Tensor: shape=(), dtype=string, numpy=b'Diese Feuerwehrleute verdienen Vertrauen.'>}
因为对火车数据集的此操作会引发类似错误:
AttributeError:“dict”对象没有属性“shape”

下面是我的一段代码:

train_list, validation_list, test_list = load_json_into_lists(TRAIN_DS_PATH, TEST_DS_PATH)
train_ds = preprocess_dataset(train_list)
val_ds = preprocess_dataset(validation_list)
test_ds = preprocess_dataset(test_list)

for batch in train_ds.take(1):
    # input_shape = batch["spectrogram"]
    # label_shape = batch["label"]
    print(batch)


    #print(batch.shape)
    #print('Input shape:', input_shape)
    #print(label_shape)

input_shape = (7811, 129, 1)

train_ds = train_ds.cache().prefetch(AUTOTUNE)
val_ds = val_ds.cache().prefetch(AUTOTUNE)

model = build_model(input_shape)
model.summary()

earlyStopping = Keras.callbacks.EarlyStopping(monitor="val_loss", mode="min", patience=10, restore_best_weights=True)
#modelCheckpoint = Keras.callbacks.ModelCheckpoint(SAVED_MODEL_PATH, monitor="val_acc", verbose=1, save_best_only=True, mode="max")

train_ds = train_ds.batch(BATCH_SIZE)
val_ds = val_ds.batch(BATCH_SIZE)

print(type(train_ds))

history = model.fit(
    train_ds, 
    validation_data=val_ds, 
    epochs=EPOCHS, 
    callbacks=[earlyStopping]
)
以下是数据集和模型的请求构建: (数据集) files参数是如下列表的列表:[“文件名”、“标签”],[“文件名”、“标签”],[…]

与数据集关联的
get\u spectrogram\u和\u label()
get\u waveform\u和\u label()
函数:

    def get_spectrogram_and_label(waveform, label_in):
        spectrogram = get_spectrogram(waveform)
        spectrogram = tf.expand_dims(spectrogram, -1)
        return {"spectrogram": spectrogram, "label": label_in}

# Subfunction of get_waveform_and_label() to get the label 
# for a certain audio file
def get_label(file_path):

    # get the loaded lists
    train_list, _, _ = load_json_into_lists(TRAIN_DS_PATH, TEST_DS_PATH)

    for sublist in train_list:
        if sublist[0] == str(bytes.decode(file_path.numpy())):

            return string_to_tensor(sublist[1])

# Sub1function of get_waveform_and_label() to get the waveform 
# for a certain audio file
def get_waveform(file_path):

    # get the loaded lists
    train_list, _, _ = load_json_into_lists(TRAIN_DS_PATH, TEST_DS_PATH)

    for sublist in train_list:
        if sublist[0] == str(bytes.decode(file_path.numpy())):
            file_to_read = str("/Users/pietmuller/Dokumente/code/AI/E2EASRS/de/cv_valid_data/" + sublist[0])
            audio_binary = tf.io.read_file(file_to_read)
            waveform = decode_audio(audio_binary)

            return waveform

# Returning waveform and label for a certain filepath
def get_waveform_and_label(file_path):

    # get label
    label_ = get_label(file_path)

    # print("file_path: ", file_path)
    # print("label: ", label_)
    # print("label_, type(): ", type(label_))

    # get waveform
    waveform_ = get_waveform(file_path)

    # print("file_path: ", file_path)
    # print("waveform_: ", waveform_)
    # print("waveform_, type(): ", type(waveform_))

    return waveform_, label_
(模型)

下面是完整的错误消息:

Traceback (most recent call last):
  File "train.py", line 368, in <module>
    main()
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/autograph/impl/api.py", line 620, in wrapper
    return func(*args, **kwargs)
  File "train.py", line 361, in main
    history = model.fit(
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 1100, in fit
    tmp_logs = self.train_function(iterator)
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 828, in __call__
    result = self._call(*args, **kwds)
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 871, in _call
    self._initialize(args, kwds, add_initializers_to=initializers)
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 725, in _initialize
    self._stateful_fn._get_concrete_function_internal_garbage_collected(  # pylint: disable=protected-access
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 2969, in _get_concrete_function_internal_garbage_collected
    graph_function, _ = self._maybe_define_function(args, kwargs)
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 3361, in _maybe_define_function
    graph_function = self._create_graph_function(args, kwargs)
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 3196, in _create_graph_function
    func_graph_module.func_graph_from_py_func(
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/framework/func_graph.py", line 990, in func_graph_from_py_func
    func_outputs = python_func(*func_args, **func_kwargs)
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 634, in wrapped_fn
    out = weak_wrapped_fn().__wrapped__(*args, **kwds)
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/framework/func_graph.py", line 977, in wrapper
    raise e.ag_error_metadata.to_exception(e)
AttributeError: in user code:

    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:805 train_function  *
        return step_function(self, iterator)
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:795 step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:1259 run
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:2730 call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:3417 _call_for_each_replica
        return fn(*args, **kwargs)
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:788 run_step  **
        outputs = model.train_step(data)
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:758 train_step
        self.compiled_metrics.update_state(y, y_pred, sample_weight)
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/compile_utils.py:387 update_state
        self.build(y_pred, y_true)
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/compile_utils.py:317 build
        self._metrics = nest.map_structure_up_to(y_pred, self._get_metric_objects,
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/util/nest.py:1159 map_structure_up_to
        return map_structure_with_tuple_paths_up_to(
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/util/nest.py:1257 map_structure_with_tuple_paths_up_to
        results = [
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/util/nest.py:1258 <listcomp>
        func(*args, **kwargs) for args in zip(flat_path_gen, *flat_value_gen)
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/util/nest.py:1161 <lambda>
        lambda _, *values: func(*values),  # Discards the path arg.
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/compile_utils.py:418 _get_metric_objects
        return [self._get_metric_object(m, y_t, y_p) for m in metrics]
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/compile_utils.py:418 <listcomp>
        return [self._get_metric_object(m, y_t, y_p) for m in metrics]
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/compile_utils.py:439 _get_metric_object
        y_t_rank = len(y_t.shape.as_list())

    AttributeError: 'NoneType' object has no attribute 'shape'
回溯(最近一次呼叫最后一次):
文件“train.py”,第368行,在
main()
文件“/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site packages/tensorflow/python/autograph/impl/api.py”,第620行,在包装器中
返回函数(*args,**kwargs)
文件“train.py”,第361行,在main中
历史=model.fit(
文件“/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site packages/tensorflow/python/keras/engine/training.py”,第1100行
tmp_logs=self.train_函数(迭代器)
文件“/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site packages/tensorflow/python/eager/def_function.py”,第828行,在调用中__
结果=自身调用(*args,**kwds)
文件“/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site packages/tensorflow/python/eager/def_function.py”,第871行,在调用中
self.\u初始化(参数、KWD、添加初始值设定项到=初始值设定项)
文件“/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site packages/tensorflow/python/eager/def_function.py”,第725行,在
self._stateful_fn._get_concrete_function_internal_garbage_collected(#pylint:disable=protected access
文件“/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor\u venv/lib/python3.8/site packages/tensorflow/python/eager/function.py”,第2969行,位于“获取混凝土”函数“内部垃圾”收集中
图形函数,自变量。可能定义函数(args,kwargs)
文件“/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor\u venv/lib/python3.8/site packages/tensorflow/python/eager/function.py”,第3361行,在定义函数中
graph\u function=self.\u create\u graph\u function(args,kwargs)
文件“/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor\u venv/lib/python3.8/site packages/tensorflow/python/eager/function.py”,第3196行,位于“创建图形”函数中
func_graph_module.func_graph_from_py_func(
文件“/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site packages/tensorflow/python/framework/func_graph.py”,第990行,位于func_graph_from_py_func中
func_outputs=python_func(*func_args,**func_kwargs)
文件“/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site packages/tensorflow/python/eager/def_function.py”,第634行,包装为
out=弱包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹包裹
文件“/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site packages/tensorflow/python/framework/func_graph.py”,第977行,在包装器中
将e.ag\u错误\u元数据引发到\u异常(e)
AttributeError:在用户代码中:
/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor\u venv/lib/python3.8/site packages/tensorflow/python/keras/engine/training.py:805 train\u函数*
返回步骤_函数(self、迭代器)
/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor\u venv/lib/python3.8/site packages/tensorflow/python/keras/engine/training.py:795 step\u函数**
输出=模型。分配策略。运行(运行步骤,参数=(数据,)
/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_-venv/lib/python3.8/site packages/tensorflow/python/distribute/distribute_-lib.py:1259 run
返回self.\u扩展。为每个\u副本调用\u(fn,args=args,kwargs=kwargs)
/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor\u venv/lib/python3.8/site packages/tensorflow/python/distribute/distribute\u lib.py:2730为每个副本调用
返回自我。为每个副本(fn、ARG、kwargs)调用
/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor\u venv/lib/python3.8/site packages/tensorflow/python/distribute/distribute\u lib.py:3417\u调用每个副本
返回fn(*args,**kwargs)
/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor\u venv/lib/python3.8/site packages/tensorflow/python/keras/engine/training.py:788 run\u step**
输出=型号列车步进(数据)
/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor\u venv/lib/python3.8/site packages/tensorflow/python/keras/engine/training.py:758 train\u step
自我编译的度量。更新度量状态(y,y,样本权重)
/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor\u venv/lib/python3.8/site packages/tensorflow/python/keras/engine/compile\u utils.py:387 update\u state
自我构建(y_pred,y_true)
/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor\u venv/lib/python3.8/site packages/tensorflow/python/keras/engine/compile\u utils.py:317 build
self.\u metrics=nest.map\u structure\u up\u to(y\u pred,self.\u get\u metric\u objects,
/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor\u-venv/lib/python3.8/site-packages/tensorflow/python/util/nest.py:1159映射到
返回映射结构和元组路径(
/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor\u-venv/lib/python3.8/site-packages/tensorflow/python/util/nest.py:1257映射结构和元组路径
结果=[
/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/util/nest.py:1258
func(*args,**kwargs)表示zip中的args(平面路径生成,*平面值生成)
/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_-venv/lib/python3.8/site-packages/tensorflow/python/util/nest.py:1161
lambda,*values:func(*values),#丢弃p
    def get_spectrogram_and_label(waveform, label_in):
        spectrogram = get_spectrogram(waveform)
        spectrogram = tf.expand_dims(spectrogram, -1)
        return {"spectrogram": spectrogram, "label": label_in}

# Subfunction of get_waveform_and_label() to get the label 
# for a certain audio file
def get_label(file_path):

    # get the loaded lists
    train_list, _, _ = load_json_into_lists(TRAIN_DS_PATH, TEST_DS_PATH)

    for sublist in train_list:
        if sublist[0] == str(bytes.decode(file_path.numpy())):

            return string_to_tensor(sublist[1])

# Sub1function of get_waveform_and_label() to get the waveform 
# for a certain audio file
def get_waveform(file_path):

    # get the loaded lists
    train_list, _, _ = load_json_into_lists(TRAIN_DS_PATH, TEST_DS_PATH)

    for sublist in train_list:
        if sublist[0] == str(bytes.decode(file_path.numpy())):
            file_to_read = str("/Users/pietmuller/Dokumente/code/AI/E2EASRS/de/cv_valid_data/" + sublist[0])
            audio_binary = tf.io.read_file(file_to_read)
            waveform = decode_audio(audio_binary)

            return waveform

# Returning waveform and label for a certain filepath
def get_waveform_and_label(file_path):

    # get label
    label_ = get_label(file_path)

    # print("file_path: ", file_path)
    # print("label: ", label_)
    # print("label_, type(): ", type(label_))

    # get waveform
    waveform_ = get_waveform(file_path)

    # print("file_path: ", file_path)
    # print("waveform_: ", waveform_)
    # print("waveform_, type(): ", type(waveform_))

    return waveform_, label_
def build_model(input_shape):

    time_dense_size = 32

    # Inputs to the model
    input_spectrogram = Input(shape=(input_shape), name="spectrogram", dtype="float32")

    labels = Input(shape=(None,), name="label", dtype="float32")

    #normalization = Keras.layers.experimental.preprocessing.Normalization()(input_spectrogram)

    # First conv block
    x = Conv2D(32, (3, 3), activation="relu", padding="same", name="Conv1")(input_spectrogram)
    x = MaxPooling2D(pool_size=(2, 2), name="pool1")(x)

    # Second conv block
    x = Conv2D(64, (3, 3), activation="relu", padding="same", name="Conv2")(x)
    x = MaxPooling2D(pool_size=(2, 2), name="pool2")(x)

    conv_to_rnn_dims = (7811 // (2 ** 2), (129 // (2 ** 2)) * 64)
    x = Keras.layers.Reshape(target_shape=conv_to_rnn_dims, name="reshape")(x)
    x = Dense(time_dense_size, activation="relu", name="dense1")(x)

    # RNNs
    gru_1 = Bidirectional(GRU(512, return_sequences=True, dropout=0.25, name="gru1"))(x)
    gru_1b = Bidirectional(GRU(512, return_sequences=True, dropout=0.25, name="gru1b"))(x)
    gru_1_merged = add([gru_1, gru_1b])

    gru_2 = Bidirectional(GRU(512, return_sequences=True, dropout=0.25, name="gru2"))(gru_1_merged)
    gru_2b = Bidirectional(GRU(512, return_sequences=True, dropout=0.25, name="gru2b"))(gru_1_merged)

    # Transforms RNN output to character activations:
    # x = Dense(NUM_CLASSES, name="dense2output")(concatenate([gru_2, gru_2b]))
    # y_pred = Activation("softmax", name="softmax")(x)

    x = Dense(NUM_CLASSES + 1, activation="softmax", name="softmax_dense")(concatenate([gru_2, gru_2b]))

    output = CTCLayer(name="ctc_loss")(labels, x)

    model = Keras.models.Model(
        inputs=[input_spectrogram, labels], outputs=output, name="sr_v1"
    )

    # Optimizer
    optimizer = Keras.optimizers.Adam(learning_rate=LEARNING_RATE)

    # Compile and return the model
    model.compile(optimizer=optimizer, metrics=["accuracy"])

    #Keras.utils.plot_model(model, "jarvis_v1.png")

    return model
Traceback (most recent call last):
  File "train.py", line 368, in <module>
    main()
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/autograph/impl/api.py", line 620, in wrapper
    return func(*args, **kwargs)
  File "train.py", line 361, in main
    history = model.fit(
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 1100, in fit
    tmp_logs = self.train_function(iterator)
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 828, in __call__
    result = self._call(*args, **kwds)
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 871, in _call
    self._initialize(args, kwds, add_initializers_to=initializers)
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 725, in _initialize
    self._stateful_fn._get_concrete_function_internal_garbage_collected(  # pylint: disable=protected-access
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 2969, in _get_concrete_function_internal_garbage_collected
    graph_function, _ = self._maybe_define_function(args, kwargs)
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 3361, in _maybe_define_function
    graph_function = self._create_graph_function(args, kwargs)
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 3196, in _create_graph_function
    func_graph_module.func_graph_from_py_func(
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/framework/func_graph.py", line 990, in func_graph_from_py_func
    func_outputs = python_func(*func_args, **func_kwargs)
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 634, in wrapped_fn
    out = weak_wrapped_fn().__wrapped__(*args, **kwds)
  File "/Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/framework/func_graph.py", line 977, in wrapper
    raise e.ag_error_metadata.to_exception(e)
AttributeError: in user code:

    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:805 train_function  *
        return step_function(self, iterator)
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:795 step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:1259 run
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:2730 call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:3417 _call_for_each_replica
        return fn(*args, **kwargs)
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:788 run_step  **
        outputs = model.train_step(data)
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:758 train_step
        self.compiled_metrics.update_state(y, y_pred, sample_weight)
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/compile_utils.py:387 update_state
        self.build(y_pred, y_true)
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/compile_utils.py:317 build
        self._metrics = nest.map_structure_up_to(y_pred, self._get_metric_objects,
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/util/nest.py:1159 map_structure_up_to
        return map_structure_with_tuple_paths_up_to(
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/util/nest.py:1257 map_structure_with_tuple_paths_up_to
        results = [
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/util/nest.py:1258 <listcomp>
        func(*args, **kwargs) for args in zip(flat_path_gen, *flat_value_gen)
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/util/nest.py:1161 <lambda>
        lambda _, *values: func(*values),  # Discards the path arg.
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/compile_utils.py:418 _get_metric_objects
        return [self._get_metric_object(m, y_t, y_p) for m in metrics]
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/compile_utils.py:418 <listcomp>
        return [self._get_metric_object(m, y_t, y_p) for m in metrics]
    /Users/pietmuller/Dokumente/code/AI/E2EASRS/tensor_venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/compile_utils.py:439 _get_metric_object
        y_t_rank = len(y_t.shape.as_list())

    AttributeError: 'NoneType' object has no attribute 'shape'