LeNet 模型问题,我该如何修复错误:“未实现的'tf.keras.Model.call()'”

LeNet Model Issues, how could I fix error : " Unimplemented `tf.keras.Model.call()`"

提问人:Jean Deleon 提问时间:11/17/2023 最后编辑:toyota SupraJean Deleon 更新时间:11/17/2023 访问量:31

问:

都。

我目前正在尝试重新创建用于训练的 LeNet 模型(回归)。我一直在尝试执行代码,但我不断收到与模型编译有关的错误。我能做些什么来修复错误?

这是我的代码:

#R^2 function
def r2_keras(y_true, y_pred):
SS_res =  K.sum(K.square( y_true - y_pred ))
SS_tot = K.sum(K.square( y_true - K.mean(y_true) ) )
return ( 1 - SS_res/(SS_tot + K.epsilon()) )
class ShowOutputCallback(Callback):
def __init__(self, interval=10):
super().__init__()
self.interval = interval
def on_epoch_end(self, epoch, logs=None):
    if epoch % self.interval == 0:
       print(f"Epoch {epoch + 1}:")
       for key, value in logs.items():
           print(f"{key}: {value:.4f}")
       print()
class LeNetRegression(tf.keras.Model):
    def __init__(self):
        super().__init__()
        self.net = tf.keras.models.Sequential([
             tf.keras.layers.Conv2D(filters=6, kernel_size=5, activation='relu', padding='same', input_shape=(32, 32, 3)),
             tf.keras.layers.AvgPool2D(pool_size=2, strides=2),
             tf.keras.layers.Conv2D(filters=16, kernel_size=5, activation='relu'),
             tf.keras.layers.AvgPool2D(pool_size=2, strides=2),
             tf.keras.layers.Flatten(),
             tf.keras.layers.Dense(120, activation='relu'),
             tf.keras.layers.Dense(84, activation='relu'),
             tf.keras.layers.Dense(10,  activation='linear')])
inputs = tf.keras.Input(shape=(32, 32, 3))
def call(self, inputs, training=False):
         return self.net(inputs)
def layer_summary(self, X_shape):
          batch_size = 32
          X = tf.random.normal((batch_size,) + X_shape)
          for layer in self.net.layers:
              X = layer(X)
              print(layer.class.name, 'output shape:\t', X.shape)
def call(self, inputs, training=False):
         return self.net(inputs)
x_train = data_array / 255.0
y_train = labels_array/ 255.0
batch_size = 128
epochs = 100
print('')
keras.model = LeNetRegression()
optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)
model.compile(loss="mse", optimizer=optimizer, metrics=["mae", r2_keras])
early_stopping = EarlyStopping(monitor='val_loss', patience=5, restore_best_weights=True)
model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1, callbacks=[early_stopping])
Result:NotImplementedError                                 Traceback (most recent call last)
<ipython-input-55-1708d8f3c919> in <cell line: 56>()
54 model.compile(loss="mse", optimizer=optimizer, metrics=["mae", r2_keras])
55 early_stopping = EarlyStopping(monitor='val_loss', patience=5, restore_best_weights=True)---> 
56 model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1, callbacks=[early_stopping])
1 frames/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py in tf__train_function(iterator)13                 try:14                     do_return = True---> 15                     retval_ = ag__.converted_call(ag__.ld(step_function), (ag__.ld(self), ag__.ld(iterator)), None, fscope)16                 except:17                     do_return = False

NotImplementedError:在用户代码中:

File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py", line 1377, in train_function  *
    return step_function(self, iterator)
File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py", line 1360, in step_function  **
    outputs = model.distribute_strategy.run(run_step, args=(data,))
File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py", line 1349, in run_step  **
    outputs = model.train_step(data)
File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py", line 1126, in train_step
    y_pred = self(x, training=True)
File "/usr/local/lib/python3.10/dist-packages/keras/src/utils/traceback_utils.py", line 70, in error_handler
    raise e.with_traceback(filtered_tb) from None
File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py", line 616, in call
    raise NotImplementedError(

NotImplementedError: Exception encountered when calling layer 'le_net_regression_16' (type LeNetRegression).

Unimplemented `tf.keras.Model.call()`: if you intend to create a `Model` with the Functional API, please provide `inputs` and `outputs` arguments. Otherwise, subclass `Model` with an overridden `call()` method.

Call arguments received by layer 'le_net_regression_16' (type LeNetRegression):
  • inputs=tf.Tensor(shape=(None, 32, 32, 3), dtype=float32)
  • training=True
  • mask=None
python-3.x keras 回归 google-colaboratory

评论


答: 暂无答案