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

2024-06-16 10:39:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我对机器学习还很陌生,我一直在尝试通过下面的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:形状(无,1)和(无,50,2)不兼容

但后来我想起,在我遵循教程的那一层中,我需要一个没有 return_sequences=True,然后我继续密集层

所以我尝试在不返回序列的情况下添加另一个循环层,现在我得到了这个结果

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

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

谢谢你们的帮助,自从我开始我的编程之旅以来,你们一直都很有帮助


Tags: 代码https网络githubcomgoogle图片教程
1条回答
网友
1楼 · 发布于 2024-06-16 10:39:27

我相信问题在于使用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, 1e-1, log=True)
  
momentum = trial.suggest_float("momentum", 0.0, 1.0)

model=tf.keras.Sequential()

#模型添加(辍学率(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)) 
    

添加(tf.keras.layers.flatte())

    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

相关问题 更多 >