【问题标题】:Tensor's shape is not compatible with supplied shape, Error in Keras Tuner张量的形状与提供的形状不兼容,Keras Tuner 中的错误
【发布时间】:2021-09-09 18:14:55
【问题描述】:

我正在使用 Keras 调谐器。对于下面的简单代码:

import keras_tuner as kt
from tensorflow.keras.regularizers import l1, l2
from tensorflow.keras.models import Sequential

# x: 100 x 20
# y: 1 x 100

tuner = kt.Hyperband(
            self.build_auto_encoder_model,
            objective='val_loss',
            max_epochs=30,
            hyperband_iterations=20)

tuner.search(x[0:80], y[0:80], epochs=30, validation_data=(x[80:], y[80:]))
best_model = tuner.get_best_models(1)[0]

def build_auto_encoder_model(hp):
    model = Sequential()
    regulizer_rate = hp.Choice("regulizer_rate", [1e-1, 1e-2, 1e-3, 1e-4, 1e-5])

    model.add(Dense(18, input_dim=20, activation='relu', kernel_regularizer=l1(regulizer_rate)))
    model.add(Dense(12, activation='relu', kernel_regularizer=l1(regulizer_rate)))
    model.add(Dense(10, activation='relu', kernel_regularizer=l1(regulizer_rate)))

    model.compile(optimizer=Adam(1e-2), loss='mse')

我已经尝试了不同数量的Dense 层,我收到以下错误:

张量的形状 (20, 18) 与提供的形状 (20, 15) 不兼容

但是,当完全创建一个新项目时,它可以工作。原因是什么?

【问题讨论】:

    标签: python tensorflow keras keras-tuner


    【解决方案1】:

    原因是由于函数代码中的一些先前错误,已经创建并加载了一个对象以供将来的任何试验使用,因为转轮的overwrite变量默认为False。此外,在创建对象的最后一个版本中,第一层是15,在您的示例中已更改为18

    解决问题的一个简单解决方案(而不是创建新项目)是将overwrite 变量设置为True,以防止重新加载以前不兼容的对象进行新的更改,如下所示:

    # ...
    tuner = kt.Hyperband(
                self.build_auto_encoder_model,
                objective='val_loss',
                max_epochs=30,
                hyperband_iterations=20,
                overwrite = True) # here
    # ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      • 1970-01-01
      • 1970-01-01
      • 2022-12-12
      相关资源
      最近更新 更多