簡體   English   中英

Keras Tuner - “模型構建函數沒有返回有效的 Keras 模型實例”

[英]Keras Tuner - “Model-building function did not return a valid Keras Model instance”

我正在嘗試使用 Keras Tuner 獲取模型的超參數,但是當我執行代碼時,出現以下錯誤:“RuntimeError:模型構建函數沒有返回有效的 Keras 模型實例,找到 <keras.engine. 0x7fd5809d5a50處的sequential.Sequential對象>"

我已經在互聯網上搜索過,但是在遵循堆棧上的多個問題以及 Keras Tuner gitHub 頁面( https://github.com/keras-team/keras-tuner )中的教程之后,它們都沒有幫助。 問題似乎與導入有關,但我已將導入更改為建議的導入,但我仍然收到相同的錯誤消息

這是代碼

def build(hp):
    activation = hp.Choice('activation', 
                        [
                          'relu',
                          'tanh',
                          'linear',
                          'selu',
                          'elu'
                        ])

    recurrent_dropout = hp.Float(
                        'recurrent_dropout', 
                        min_value=0.0,
                        max_value=0.99,
                        default=0.2)
    num_units = hp.Int(
                        'num_units', 
                        min_value=0,
                        max_value=64,
                        default=32)
    
    model = Sequential()
    model.add(LSTM(units=num_units, activation=activation, recurrent_dropout = recurrent_dropout,input_shape=(X_train.shape[1], 1)))

    model.add(Dense(1))

    model.compile(
      optimizer=keras.optimizers.Adam(
      hp.Float(
        'learning_rate',
        min_value=1e-10,
        max_value=1e-2,
        sampling='LOG',
        default=1e-6
            ),

        ),
        loss=tf.losses.MeanSquaredError(),
        metrics=[tf.metrics.MeanAbsoluteError()]
    )
    return model

for company in companies:
    scaler, X_train, y_train, X_val, y_val, X_test, y_test = lstm_preprocessing(company, start, end)
    
    bayesian_opt_tuner = BayesianOptimization(
        build,
        objective="val_loss",
        max_trials=3,
        executions_per_trial=1,
        directory=os.path.normpath('C:/keras_tuning'),
        project_name='kerastuner_bayesian_poc',
        overwrite=True)
    n_epochs=100
    stop_early = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=5)

    bayesian_opt_tuner.search(X_train, y_train, epochs=n_epochs,
                              validation_data=(X_val, y_val),
                              validation_split=0.2, verbose=1,
                              callbacks=[stop_early])

    bayes_opt_model_best_model = bayesian_opt_tuner.get_best_models(
        num_models=1)
    model = bayes_opt_model_best_model[0]

    train_predict, val_predict, test_predict, test_y = evaluate_model(model, scaler, X_train,y_train,X_val,y_val,X_test,y_test)
    mse=mean_squared_error(test_y[0], test_predict[:, 0])
    mae=mean_absolute_error(test_y[0], test_predict[:, 0])
    mape=mean_absolute_percentage_error(test_y[0], test_predict[:, 0])

    plt.figure(figsize=(15, 5))
    plt.plot(test_predict[:, 0], label='Predict stock price')
    plt.plot(test_y[0], label='Real stock price')
    plt.title(company+ ' stock price')
    plt.xlabel('Time in days from 2020-01-01 to 2020-12-30')
    plt.ylabel('Price per share(USD)')
    plt.legend()
    plt.show()
  

    print('MAE: {} and MSE: {} and MAPE: {}' .format(mae,mse,mape))

這是完整的錯誤消息:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-29-de95b1bdc07c> in <module>()
     14         directory=os.path.normpath('C:/keras_tuning'),
     15         project_name='kerastuner_bayesian_poc',
---> 16         overwrite=True)
     17     n_epochs=100
     18     stop_early = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=5)

6 frames
/usr/local/lib/python3.7/dist-packages/keras_tuner/engine/hypermodel.py in build(self, hp)
    140                 raise RuntimeError(
    141                     "Model-building function did not return "
--> 142                     "a valid Keras Model instance, found {}".format(model)
    143                 )
    144 

RuntimeError: Model-building function did not return a valid Keras Model instance, found <keras.engine.sequential.Sequential object at 0x7fd5809d5a50>

這是我的進口:

!pip install keras-models
!pip install tensorflow
!pip install git+https://github.com/keras-team/keras-tuner.git@1.0.2rc0egg=keras-tuner-1.0.2rc0
!pip install pydot
!pip install pydotplus
!pip install graphviz
!pip install keras-tuner --upgrade


import tensorflow as tf
from tensorflow import keras

from statsmodels.stats.stattools import durbin_watson
from scipy.stats.stats import pearsonr

# Metrics 
from keras import metrics

# Models
from tensorflow.keras.models import Sequential, Model, load_model
from tensorflow.keras import layers
from keras_tuner.tuners import RandomSearch
from tensorflow.keras.layers import Conv2D,Flatten,Dropout,Dense
from tensorflow.keras.optimizers import Adam

# LSTM Layers 
from tensorflow.keras.layers import Dense, LSTM, Dropout, RepeatVector, Flatten
from tensorflow.keras.layers import TimeDistributed, Input, BatchNormalization, Activation
from tensorflow.keras.layers import multiply, concatenate, dot

# Optimisation and Utils

from tensorflow.keras.utils import plot_model
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.callbacks import EarlyStopping
from keras_tuner.tuners import BayesianOptimization

我已經在 Mnist 數據集上測試了您的代碼,n_epochs=2。 它工作正常。 要做的是

  1. 在搜索簽名中刪除validation_data 或validation_split(您不需要兩者)。
  2. 再次檢查您的輸入形狀。
  3. 您沒有在搜索中的任何地方使用 num_units。

我得到的輸出:

bayesian_opt_tuner.search_space_summary()

Search space summary
Default search space size: 4
activation (Choice)
{'default': 'relu', 'conditions': [], 'values': ['relu', 'tanh', 'linear', 'selu', 'elu'], 'ordered': False}
recurrent_dropout (Float)
{'default': 0.2, 'conditions': [], 'min_value': 0.0, 'max_value': 0.99, 'step': None, 'sampling': None}
num_units (Int)
{'default': 32, 'conditions': [], 'min_value': 0, 'max_value': 64, 'step': 1, 'sampling': None}
learning_rate (Float)
{'default': 1e-06, 'conditions': [], 'min_value': 1e-10, 'max_value': 0.01, 'step': None, 'sampling': 'log'}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM