Keras LearningRateScheduler由于输出类型错误未能执行

我正在开发一个神经网络,它在运行过程中出现了问题,大约运行20个周期后,准确率突然急剧下降。我了解到这可能是学习率的问题,通过学习率调度来降低学习率可能是解决方案。我尝试使用Keras LearningRateScheduler来解决这个问题。我在模型接受新的学习率时遇到了问题。它会在前十个周期正常运行。当第一次改变学习率时,会出现以下错误:ValueError: The output of the "schedule" function should be float. 我尝试使用float()转换返回值,但没有成功。我找不到任何合理的解释。希望这里有人能帮我解决这个问题。

我使用Google Colab GPU上的Python来进行这个实验。网络的代码如下。如果需要更多信息,请告诉我。

X_train, X_validate, Y_train, Y_validate=train_test_split(X,Y,test_size=0.2)from keras.backend import sigmoiddef swish(x):  return (x*sigmoid(x))from keras.utils.generic_utils import get_custom_objectsfrom keras.layers import Activationget_custom_objects().update({'swish': Activation(swish)})model=Sequential()model.add(Dense(1024, activation='swish',input_shape=(6,)))model.add(Dense(512, activation='swish'))model.add(Dense(256, activation='swish'))model.add(Dense(128, activation='swish'))model.add(Dense(64, activation='swish'))model.add(Dense(32, activation='swish'))model.add(Dense(16, activation='swish'))model.add(Dense(10, activation='softmax'))model.compile(loss='categorical_crossentropy',optimizer='adam', metrics=['accuracy'])from keras.callbacks import LearningRateSchedulerdef scheduler(epochs, lr):  if epochs < 10:    return 0.001  elif 10 < epochs < 20:    return 0.0005  elif 20 < epochs < 30:    return 0.00025  elif 30 < epochs < 50:    return 0.000125  elif 50 < epochs < 75:    return 0.0000625  elif 75 < epochs:    return 0.0000313callback=LearningRateScheduler(scheduler, verbose=1)model.fit(X_train, Y_train, batch_size=75, epochs=50, callbacks=[callback], verbose=1) #Line referenced in errormodel.summary()score=model.evaluate(X_validate, Y_validate, verbose=1)print("The loss and accuracy of the validation set are: "+str(score))x=X_validate[52]y=np.argmax(Y_validate[52])y_pred=model.predict(np.array([x]))y_pred=np.argmax(y_pred)print("For the input data, the known mode is: "+str(y))print("For the input data, the predicted mode is: "+str(y_pred))

回答:

我已经解决了这个问题。返回值不能只是一个学习率的值。相反,它需要传递一个函数。例如:return lr * math.exp(-0.1)

此外,学习率调度似乎已经解决了我之前遇到的问题,即准确率突然下降的问题。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注