在Keras中选择正确的深度学习模式

2024-10-01 15:47:31 发布

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

我面临的实时问题有4个特点: VmeanVmedianVnowVV。 我想做的是:

for i in range(len(X)):
     model.fit(X[i], X[i+1])
     model.predict(X[i+1])

也就是说,我试图预测X[i+2]X[i+1]X[i]的值,因为一行与下一行相关,依此类推。 这是我的模型:

def kerasModel():
    input_layer = keras.layers.Input(shape=(4, 1), name='input_shape')
    x = keras.layers.LSTM(100, name='lstm_0')(input_layer)
    x = keras.layers.Dropout(0.2, name='lstm_dropout')(x)
    x = keras.layers.Dense(64, name='x2')(x)
    output = keras.layers.Dense(4, activation='linear', name='x3')(x)
    model = keras.Model(inputs=input_layer, outputs=output)
    
    adam = keras.optimizers.Nadam(lr=0.005)
    model.compile(optimizer=adam, loss='mse')
    
    return model

但它不起作用。它并没有像它应该做的那样预测下一个价值。我的问题是:是否有任何文件或规则可以根据您的特点创建一个好的深度学习模型?另外,基于这个问题,哪一个可能是一个好的模型


Tags: name模型layerinputoutputmodellayerskeras
3条回答

My question is: is there any paper or rules to make a good deep learning model based on your features?

据我所知,没有这样的“规则手册”会告诉你在任何情况下使用什么样的模型。 深度学习论文往往侧重于特定的应用(图片分类、分割、机器翻译等),在这个子领域中,您将发现专门的体系结构往往能够更好地执行特定任务

Plus, based in this problem, which could be a good model?

在不了解您的问题和详细数据等情况下回答这个问题是不可能的

但值得思考的是“好”的含义。如果您在MNIST这样的数据集上观察深度学习模型随时间的边际性能改进,您会发现,与更高级和更专业的体系结构相比,即使是“基线”MLP也可以获得可接受的错误率

enter image description herehttps://en.wikipedia.org/wiki/MNIST_database

因此,在跳到更高级的体系结构之前,我总是从一个小而简单的模型开始让代码工作,然后我逐渐增加复杂性,只要它在度量方面产生了值得花费时间的微小改进

But it is not working

首先

正如@emremrah所说,您的OP不够具体,但是看看您的代码,我认为第一个问题来自于您使用函数而不是子分类来定义您的模型。由于您是在for循环中调用模型,因此对函数的每次调用都将生成一个新模型,而不是拟合现有模型

尝试对模型进行子分类,并创建一个实例,如本例所示:

class Dense_Detector(Model):
  def __init__(self, flight_len, param_len):
    super(Dense_Detector, self).__init__()
    self.input_dim = (flight_len, param_len)
    self.encoder = tf.keras.Sequential([
      layers.Flatten(),
      layers.Dense(32, activation="relu"),
      layers.Dense(16, activation="relu"),
      layers.Dense(8, activation="relu")
      ])
    
    self.decoder = tf.keras.Sequential([
      layers.Dense(16, activation="relu"),
      layers.Dense(32, activation="relu"),
      layers.Dense(flight_len * param_len, activation="relu"),
      layers.Reshape(self.input_dim)
      ])
    
  def call(self, x):
    encoded = self.encoder(x)
    decoded = self.decoder(encoded)
    return decoded


model = Dense_Detector(flight_len, param_len, hidden_state=16)
optimizer = tf.keras.optimizers.Adam(clipvalue=1.0)
model.compile(optimizer=optimizer, loss=losses.MeanSquaredError())

除非你有特定的理由这样做,否则我不会把训练和预测混为一谈,因为这毫无意义

培训的目标是让您的模型调整其内部状态,以通过将其暴露于一系列示例(data, label)中,对您试图实现的任务建立“理解”,在本例中,预测下一步。希望在看到成百上千的数据后,它能够正确地对看不见的数据进行分类

您所做的是在一个实例上训练模型:

model.fit(X[i], X[i+1])

然后尝试预测下一个:

model.predict(X[i+1])

因此,基本上,您希望模型在只看到一个实例之后就能够理解您的数据

不幸的是,我不会给你一个“即插即用”的解决方案,但我希望这能帮助你更好地理解你的模型和你正在做的事情

我的规则是创建基线,然后尝试改进模型,清理或挖掘更多数据,处理训练过程等。在您的情况下,基线可能更简单的时间序列multi-step dense model

trainable model

Is there any paper or rules to make a good deep learning model based on your features?

正如@yoan-b-m-sc已经提到的,没有模型选择的规则手册(更重要的是超参数选择)。这主要是直觉和大量的尝试和错误

但是你可以根据手头的问题得到一些提示。比如说

  • 如果输入特征具有某种局部相关性(如图像、视频、音频等),则可能应该使用卷积层
  • 如果您的输入功能具有可变长度(如自然语言处理、音频处理等),您可能应该使用RNN
  • 如果输入特征之间没有时间或空间相关性,则可能应该使用普通的多层非线性神经网络

这些都是提示,前面提到的最终解决方案来自直觉和试错

如果你问“但是我该如何获得这种直觉呢?”我的建议是从了解为什么创建了不同的体系结构开始。例如,首先学习RNN的发明原因。或者通过学习CNN试图解决什么样的问题以及它们为什么工作

Jeff Hinton的“机器学习神经网络”和Andrew Ng的“机器学习”课程是一个很好的起点

based on this problem, which could be a good model?

如果你确信X[i-1]和X[i-2]有足够的信息来预测X[i],我建议放弃LSTM,使用一个简单的前馈神经网络(一组密集层)

即使您知道最后的“k”元素不足以进行完美的预测,但可以创建良好的估计,在尝试LSTM之前,请先尝试对其使用简单的神经网络。RNN更复杂,需要进行更多调整

最后,请记住,“模型选择不当”并不是您的模型不起作用的唯一原因。原因可能是缺少足够的示例、错误的初始化、输入和输出的错误规范化等

相关问题 更多 >

    热门问题