-1

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

但后来我记得在我遵循教程的那一个中,我需要一个没有 return_sequences=True 的循环层,然后再继续使用密集层

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

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

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

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

4

1 回答 1

1

我相信问题在于使用 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)

模型 = tf.keras.Sequential()

#model.add(辍学(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

于 2021-03-13T21:08:09.370 回答