Невозможно обновить переменную с помощью формы [2], используя тензор с формой [512,1], формы должны быть равны. [Op:Назначить переменную]

#python #tensorflow #keras

Вопрос:

Я знаю, что этот вопрос задавали много раз раньше, но я просто не могу понять, что происходит не так.

Моя модель принимает один вход и выдает два выхода , я передаю ее в словаре:

 train_dataset = tf.data.Dataset.from_tensor_slices(
    (
        {"input_1": atr},
        {"ed": wtr, "sd": wbtr},
    )
)
train_dataset = train_dataset.batch(100).repeat(3)
 

Форма всех трех массивов atr , wtr и wbtr есть (7838, 512, 1) .
Это моя модель:

 import tensorflow as tf
import tensorflow_addons as tfa
from tensorflow.keras import Input, Model


input1 = tf.keras.layers.Input(shape=(None,1),name="input_1")
x = tf.keras.layers.Conv1D(filters=16, kernel_size=3, strides=1, padding="causal", activation="relu",input_shape=[None,1])(input1)
x = tf.keras.layers.Bidirectional(tf.keras.layers.GRU(128, activation="tanh", return_sequences=True))(x)
x = tf.keras.layers.Bidirectional(tf.keras.layers.GRU(256, activation="tanh", return_sequences=True))(x)
x = tf.keras.layers.Dense(128, activation="tanh")(x)
o1 = tf.keras.layers.Dense(1, activation="linear",name="ed")(x)
o2 = tf.keras.layers.Dense(1, activation="sigmoid",name="sd")(x)

model = Model(inputs=[input1], outputs=[o1, o2])

model.compile(loss={'ed': 'mean_squared_error', 
                    'sd': 'binary_crossentropy'},
              loss_weights={'ed':0.4,
                            'sd':0.6},
              optimizer='adam',
              metrics={'ed': tf.keras.metrics.MeanAbsoluteError(name="mean_absolute_error", dtype=None),
                       'sd': tfa.metrics.F1Score(name="f1_score",num_classes=2, threshold=0.5)})
 

Вот краткое описание модели:

 Model: "model_14"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_1 (InputLayer)            [(None, None, 1)]    0                                            
__________________________________________________________________________________________________
conv1d_18 (Conv1D)              (None, None, 16)     64          input_1[0][0]                    
__________________________________________________________________________________________________
bidirectional_33 (Bidirectional (None, None, 256)    112128      conv1d_18[0][0]                  
__________________________________________________________________________________________________
bidirectional_34 (Bidirectional (None, None, 512)    789504      bidirectional_33[0][0]           
__________________________________________________________________________________________________
dense_17 (Dense)                (None, None, 128)    65664       bidirectional_34[0][0]           
__________________________________________________________________________________________________
ed (Dense)                      (None, None, 1)      129         dense_17[0][0]                   
__________________________________________________________________________________________________
sd (Dense)                      (None, None, 1)      129         dense_17[0][0]                   
==================================================================================================
Total params: 967,618
Trainable params: 967,618
Non-trainable params: 0
__________________________
 

Наконец-то мой model.fit() метод:

 history = model.fit(train_dataset,epochs=3,verbose=1,steps_per_epoch= 78)
 

Вот в чем ошибка:

     InvalidArgumentError: Cannot update variable with shape [2] using a Tensor with shape [512,1], shapes must be equal. [Op:AssignAddVariableOp]
 

I don’t where I’m going wrong , pls help.