【问题标题】:Tensorflow2 Keras Tuning both units and activation functionTensorflow2 Keras 调整单位和激活函数
【发布时间】:2021-06-17 01:27:01
【问题描述】:

我正在尝试设置一个 Keras 调谐器来同时调整层数和激活函数。网络尝试将 2D 函数变形为另一个 2D 函数。我不断收到错误:

ValueError: Unknown activation function: sigmoidtanh

我的代码如下:

python

def euclidean_distance_loss(y_true, y_pred):
return tf.reduce_sum(tf.math.squared_difference(y_pred, y_true), axis=1)

def model_builder(hp):
model = tf.keras.Sequential()
tf.keras.layers.InputLayer(input_shape=(2,)),

#===Tune number of layers===#
for i in range(hp.Int('num_layers', 2, 5)):
    #===Tune number of units and activation in each layer===#
    hp_units = hp.Int('units_' + str(i), min_value=12, max_value=512, step=10)
    activation = hp.Choice('activation_' + str(i), ['linear', 'relu', 'selu', 'sigmoid', 'tanh'])
    model.add(tf.keras.layers.Dense(units=hp_units, activation=activation))

#===Add Final Layer===#
model.add(tf.keras.layers.Dense(units=2, activation='linear'))

#===Compile===#
model.compile(optimizer='adam', loss=euclidean_distance_loss, metrics=['MeanSquaredError'])

return model

b_tuner = BayesianOptimization( model_builder,
                            objective = 'val_mean_squared_error',
                            max_trials = 10,
                            executions_per_trial = 15,
                            directory = 'output',
                            project_name = 'b_tune_nn' )


b_tuner.search(x_train_points, y_train_points, epochs=25, validation_split=0.2)

现在如果我写:

    model.add(tf.keras.layers.Dense(units=hp_units, activation='tanh'))

一切正常。我在指定模型时做错了什么?

如果您需要更多上下文,请告诉我。

【问题讨论】:

  • 您的模型代码在 Colab 上没有为我产生错误。
  • @Frightera 这应该有所作为吗?我在 ubuntu linux 机器上运行 python3.8。
  • 我不确定,但我发布了一个可能的修复方法。

标签: keras tensorflow2.0 tf.keras activation-function keras-tuner


【解决方案1】:

适合我的完整代码:

import kerastuner as kt
import tensorflow as tf
from kerastuner import BayesianOptimization
import numpy as np

x_train = np.random.randn(1000,20)
y_train = np.random.randn(1000,2)

def euclidean_distance_loss(y_true, y_pred):
  return tf.reduce_sum(tf.math.squared_difference(y_pred, y_true), axis=1)

def model_builder(hp):
  model = tf.keras.Sequential()
  tf.keras.layers.InputLayer(input_shape=(2,)),

  #===Tune number of layers===#
  for i in range(hp.Int('num_layers', 2, 5)):
    #===Tune number of units and activation in each layer===#
    hp_units = hp.Int('units_' + str(i), min_value=12, max_value=512, step=10)
    activation = hp.Choice('activation_' + str(i), ['linear', 'relu', 'selu', 'sigmoid', 'tanh'])
    model.add(tf.keras.layers.Dense(units=hp_units, activation=activation))
  #===Add Final Layer===#
  model.add(tf.keras.layers.Dense(units=2, activation='linear'))

  #===Compile===#
  model.compile(optimizer='adam', loss=euclidean_distance_loss, metrics=['MeanSquaredError'])

  return model


b_tuner = BayesianOptimization( model_builder,
                            objective = 'val_mean_squared_error',
                            max_trials = 10,
                            executions_per_trial = 15,
                            directory = 'output',
                            project_name = 'b_tune_nn' )


b_tuner.search(x_train, y_train, epochs=25, validation_split=0.2)

编辑:

pip uninstall keras-tuner
pip install -U keras-tuner # get the latest version

【讨论】:

  • 不幸的是,我仍然遇到同样的错误...这不起作用:-/
  • 有趣的是......即使我改用 '['linear', 'relu', 'selu']' (丢弃 sigmoid 和 tanh)我仍然得到同样的错误。那么也许有些东西没有正确安装?
  • 我刚刚在使用 python 3.8 的本地环境中尝试了它们,没有错误。您的安装可能有问题。带有一些虚拟数据的代码 sn-ps 对我来说很好。
  • 好的...你知道我怎样才能擦掉整个东西然后重新开始吗?
  • 没关系 - 我有另一个设置,我刚刚将所有内容移植到它并且它工作。谢谢你的帮助!!
猜你喜欢
  • 2020-12-05
  • 1970-01-01
  • 2017-08-10
  • 2019-09-10
  • 2018-08-14
  • 2020-07-04
  • 2017-11-03
  • 1970-01-01
  • 2020-09-13
相关资源
最近更新 更多