微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 optuna 优化时的 Tensorflow / keras 问题

如何解决使用 optuna 优化时的 Tensorflow / keras 问题

我对机器学习还很陌生,我一直在尝试通过关注 sentdex 教程来自学神经网络。我按照他的教程使用循环神经网络来预测各种加密货币的价格,并在更改 NumPy 数组和一些语法后取得了成功。现在我一直在尝试对其进行优化,因为我注意到通过调整网络的学习率和层,过度拟合会发生多么剧烈的变化。

没有错误代码是这个 https://colab.research.google.com/drive/1VNeRLeGBByEIdMVwXcbsOR8xjWwsHHoQ?usp=sharing

看起来我只是复制并粘贴了代码,但这只是因为我正在对代码进行故障排除,我只是将这个代码与我在教程中遵循的代码进行了引用,然后在我开始工作后继续使用这个代码

我一直在尝试遵循 optuna 的教程和我发现的用于优化在线网络的代码,因此我正在尝试从这些来源添加

https://github.com/optuna/optuna/blob/master/examples/tensorflow/tensorflow_eager_simple.py

https://github.com/optuna/optuna/blob/master/examples/keras/keras_integration.py

https://colab.research.google.com/drive/1-tANR7FopTX_ipAUCJmfZ2h_-iu3ljD_?usp=sharing

我想做的是这个

https://colab.research.google.com/drive/1cgnz7XUwnhfBvsA9whCXKQ3PrRs_sddh?usp=sharing

这是我遇到错误的地方。起初,当我发这个帖子时,我被卡在了

ValueError: Shapes (None,1) 和 (None,50,2) 不兼容

但后来我想起在我遵循教程的那个中,我需要一个不带的循环层 return_sequences=True 在我继续使用密集层之前

所以我尝试添加一个循环层而不返回序列,现在我得到了这个

ValueError: 层 lstm_20 的输入 0 与层不兼容:预期 ndim=3,发现 ndim=2。收到完整形状:(无,2)

我不完全确定从这里去哪里。我觉得我只是在做一些愚蠢的事情,一年来我一直试图从我自己的图像教程中找出如何使用卷积神经网络,因为我正在重塑而不是调整图片大小。我希望事情就这么简单。

感谢你们所有人的帮助,自从我开始我的编程之旅以来,你们一直非常有帮助。

解决方法

我认为问题在于使用 optuna 构建模型。经过几次错误并解决了很多问题后,我一切正常。如果有人感兴趣,这里是与我遇到的错误相关的部分。

    def create_model(trial):
# We optimize the numbers of layers,their units and weight decay parameter.

n_layers = trial.suggest_int("n_layers",3,20)
weight_decay = trial.suggest_float("weight_decay",1e-100,1e-1,log=True)
lr = trial.suggest_float("lr",1e-12,log=True)
  
momentum = trial.suggest_float("momentum",0.0,1.0)

模型 = tf.keras.Sequential()

#model.add(Dropout(0.1))

for i in range(n_layers):
    
    dropout = trial.suggest_float("dropout_l{}".format(i),0.05,0.5)

    num_hidden = trial.suggest_int("n_units_l{}".format(i),32,256,log=True)

    model = Sequential()

    model.add(LSTM(num_hidden,input_shape=(train_x.shape[1:]),return_sequences=True))

    model.add(Dropout(rate=dropout)) 
    
    model.add(LSTM(num_hidden))

    model.add(Dropout(rate=dropout)) 
    
    model.add(Dense(num_hidden,activation='relu'))

    model.add(Dropout(rate=dropout)) 
    

model.add(tf.keras.layers.Flatten())

    model.add(Dense(
            num_hidden,activation="relu",kernel_regularizer=tf.keras.regularizers.l2(weight_decay)
        )
    )
model.add(Dense(2,activation='softmax',kernel_regularizer=tf.keras.regularizers.l2(weight_decay)))
    #tf.keras.layers.Dense(2,kernel_regularizer=tf.keras.regularizers.l2(weight_decay)))

        # Compile model.
model.compile(
    optimizer=tf.keras.optimizers.SGD(lr=lr,momentum=momentum,nesterov=True),loss="sparse_categorical_crossentropy",metrics=["accuracy"],)

return model

如果你想看到它的所有代码,这是我目前所拥有的,需要大量整理,但它有效。非常感谢任何建议。

https://colab.research.google.com/drive/1cgnz7XUwnhfBvsA9whCXKQ3PrRs_sddh?usp=sharing

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。