急切执行期间不支持会话关键字参数。您通过了:{'learning_rate':1e-05}

时间:2019-05-23 19:48:34

标签: tensorflow keras

我想对学习率进行超参数调整。但是,出现了我不知道如何解决的错误。

我使用了Tensorflow.Keras软件包。

import tensorflow as tf 
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.datasets.mnist import load_data 
from tensorflow.keras.models import Sequential 
from tensorflow.keras.layers import (Flatten, BatchNormalization, Dropout, Dense)
from keras.wrappers.scikit_learn import KerasClassifier

(x_train_all, y_train_all), (x_test, y_test) = load_data()
x_train, x_valid, x_test = x_train_all[5000:]/255.0, x_train_all[:5000]/255.0, x_test/255.0
y_train, y_valid = y_train_all[5000:], y_train_all[:5000]
tf.cast(x_train, tf.float32)
tf.cast(x_valid, tf.float32)
tf.cast(x_test, tf.float32)

def my_model(learning_rate = 5e-3):
    model = Sequential([
             Flatten(input_shape = (28, 28)),
             BatchNormalization(), 
             Dropout(rate = 0.2), 
             Dense(300, activation = "elu", kernel_initializer = "he_normal"),
             Dropout(rate = 0.2), 
             BatchNormalization(), 
             Dense(300, activation = "elu", kernel_initializer = "he_normal"),
             Dropout(rate = 0.2), 
             BatchNormalization(), 
             Dense(10, activation = "softmax",kernel_initializer = "he_normal")])
    opt = Adam(lr = learning_rate)
    model.summary()
    model.compile(loss = "sparse_categorical_crossentropy", optimizer = opt, learning_rate = learning_rate, metrics = ["accuracy"]) 
    return model 



from sklearn.model_selection import RandomizedSearchCV
keras_classifier = KerasClassifier(my_model)
param_distribs = {"learning_rate": [1e-5, 5e-5, 1e-4, 5e-4, 1e-3, 5e-3]}
rnd_search_cv = RandomizedSearchCV(keras_classifier, param_distribs, n_iter = 10, cv = 3)
rnd_search_cv.fit(x_train, y_train, epochs = 10, validation_data = (x_valid, y_valid))

我得到如下值错误:

  

ValueError:急切期间不支持会话关键字参数   执行。您通过了:{'learning_rate':1e-05}

1 个答案:

答案 0 :(得分:2)

在本节中提及解决方案(即使在Comment的部分中也有提及),以造福社区。

通过删除learning_rate = learning_rate中的model.compile解决了该问题。

下面提到了正确的代码:

def my_model(learning_rate = 5e-3):
    model = Sequential([
             Flatten(input_shape = (28, 28)),
             BatchNormalization(), 
             Dropout(rate = 0.2), 
             Dense(300, activation = "elu", kernel_initializer = "he_normal"),
             Dropout(rate = 0.2), 
             BatchNormalization(), 
             Dense(300, activation = "elu", kernel_initializer = "he_normal"),
             Dropout(rate = 0.2), 
             BatchNormalization(), 
             Dense(10, activation = "softmax",kernel_initializer = "he_normal")])
    opt = Adam(lr = learning_rate)
    model.summary()
    model.compile(loss = "sparse_categorical_crossentropy", optimizer = opt, metrics = ["accuracy"]) 
    return model