1

我正在尝试在一个程序中按照 Krish naik Youtube 教程学习 CNN,但出现此错误:

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

我的代码如下

import keras.datasets
fashion=keras.datasets.fashion_mnist
(x_train,y_train),(x_test,y_test)=fashion.load_data()

x_train=x_train/255.00
x_test=x_test/255.00
x_train=x_train.reshape(x_train.shape[0],x_train.shape[1],x_train.shape[2],1)
x_test=x_test.reshape(x_test.shape[0],x_test.shape[1],x_test.shape[2],1)
from keras.models import Sequential
from keras.layers import Conv2D,Flatten,Dropout,Dense
from keras.optimizers import Adam
def build_knn(hp):
    models=Sequential()
    models.add(Conv2D(filters=hp.Int('conv2d_1',min_value=32,max_value=128,step=16),
                      kernel_size=hp.Choice('conv1_kernal',values=[3,5]),
                      activation='relu',
                      input_shape=(28,28,1)
                                    ))
    models.add(Conv2D(filters=hp.Int('conv2d_1',min_value=32,max_value=128,step=16),
                      kernel_size=hp.Choice('conv1_kernal',values=[3,5]),
                      activation='relu'
                                    ))
    models.add(Flatten())
    models.add(Dense(hp.Int('neural1',min_value=32,max_value=128,step=16),activation='relu'))
    models.add(Dense(10,activation='softmax'))
    models.compile(optimizer=Adam(hp.Choice('learning_rate',values=[1e-2,1e-3])),
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy']
                 )
    return models
from kerastuner import RandomSearch
from kerastuner.engine.hyperparameters import HyperParameters
tuner_search=RandomSearch(build_knn,objective='val_accuracy',max_trials=5,directory='jupyterfiles',project_name='krish_naik_fashion_mnist')
4

1 回答 1

3

项目站点中不是清楚,但确实提到了 Keras Tuner 是(重点补充):

Keras 的超参数调谐器,特别适用tf.keras于 TensorFlow 2.0。

换句话说,它适用于tf.keras,但不适用于您似乎在这里使用的 Keras 的独立版本。

实际上,从上面链接的项目站点改编基本示例,但将导入更改为使用独立的 Keras,会复制您报告的错误:

!pip install -U keras-tuner

import keras
from keras import layers
from kerastuner.tuners import RandomSearch

def build_model(hp):
    model = keras.Sequential()
    model.add(layers.Dense(units=hp.Int('units',
                                        min_value=32,
                                        max_value=512,
                                        step=32),
                           activation='relu'))
    model.add(layers.Dense(10, activation='softmax'))
    model.compile(
        optimizer=keras.optimizers.Adam(
            hp.Choice('learning_rate',
                      values=[1e-2, 1e-3, 1e-4])),
        loss='sparse_categorical_crossentropy',
        metrics=['accuracy'])
    return model

tuner = RandomSearch(
    build_model,
    objective='val_accuracy',
    max_trials=5,
    executions_per_trial=3,
    directory='my_dir',
    project_name='helloworld')

结果:

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

但只需更改要使用的导入tf.keras,即:

from tensorflow import keras
from tensorflow.keras import layers
from kerastuner.tuners import RandomSearch

上面相同的代码运行正常,没有错误。

因此,您应该将此处显示的导入更改为:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D,Flatten,Dropout,Dense
from tensorflow.keras.optimizers import Adam

你应该没问题(当然前提是你确实使用了 Tensorflow 2.0)。

我刚刚打开了一个相关的Github 问题,建议他们将这一澄清明确地包含在可见的位置。

于 2020-06-01T00:46:37.820 回答