Deep learning/Error

RuntimeError : Model-building function did not return a valid Keras Model instance, found None

비비이잉 2021. 8. 23. 16:38
반응형
RuntimeError: Model-building function did not return a valid Keras Model instance, found None

케라스 튜너 에러 해결 방법 !

 

오늘 이걸로 몇시간을 회사에서 시간을 보냈는지,,,, Error 를 마주해서 못풀면 너무 너무 답답하다,,,

 

이 글을 보는 모든 분들은 바로바로 해결하고 넘어가셨으면 좋곘다 : ) 

 

 

아니 아무리 구글링해도 

 

from tensorflow.keras import layers, models 로 바꿔서 하라는데 

긍까 from keras import layers, models로 하면 안된다고함 !! 

 

근데 keras -> tensorflow.keras로 바꿔도 에러가 뜸

 

 

# builder 생성하여서 학습하기 간단하게 

def model_builder(hp):
    model = keras.Sequential()
    model.add(base_model)

    model.add(keras.layers.GlobalAveragePooling2D())
    
    model.add(keras.layers.BatchNormalization())
    
    model.add(keras.layers.Dropout(0.2))
    
    model.add(keras.layers.Dense(21))
    
    hp_learning_rate = hp.Choice('learning_rate', values = [1e-2, 1e-3, 1e-4]) 
    model.compile(optimizer = keras.optimizers.Adam(learning_rate = hp_learning_rate),
                loss = keras.losses.SparseCategoricalCrossentropy(from_logits = True), 
                metrics = ['accuracy'])
    #model.compile(optimizer = keras.optimizers.Adam(hp.Float('learning_rate', 1e-4, 1e-2, sampling = 'log')), loss = tf.keras.losses.BinaryCrossentropy(), metrics=[tf.keras.metrics.BinaryAccuracy(name='accuracy'), f1])

    model.summary()

자자 model_builder함수를 이렇게 정의할때 model.summary로 마지막을 매꿔주는게 아니라 

 

# builder 생성하여서 학습하기 간단하게 

def model_builder(hp):
    model = keras.Sequential()
    model.add(base_model)

    model.add(keras.layers.GlobalAveragePooling2D())
    
    model.add(keras.layers.BatchNormalization())
    
    model.add(keras.layers.Dropout(0.2))
    
    model.add(keras.layers.Dense(21))
    
    hp_learning_rate = hp.Choice('learning_rate', values = [1e-2, 1e-3, 1e-4]) 
    model.compile(optimizer = keras.optimizers.Adam(learning_rate = hp_learning_rate),
                loss = keras.losses.SparseCategoricalCrossentropy(from_logits = True), 
                metrics = ['accuracy'])
    #model.compile(optimizer = keras.optimizers.Adam(hp.Float('learning_rate', 1e-4, 1e-2, sampling = 'log')), loss = tf.keras.losses.BinaryCrossentropy(), metrics=[tf.keras.metrics.BinaryAccuracy(name='accuracy'), f1])

    return model

이렇게 return model 을 시켜주면 

 

tuner = kt.Hyperband(model_builder,
                     objective = 'val_loss', 
                     max_epochs = 10,
                     factor = 5,
                     directory = 'my_dir',
                     project_name = 'intro_to_kt')

잘돌아감...

 

왜 아무도 안가르쳐줬어 ㅠㅠㅠㅠㅠ 구글링 해서 들어간 페이지만 몇개야 ~!~!

반응형