【问题标题】:How to apply some features into a deep learning model?如何将一些特征应用到深度学习模型中?
【发布时间】:2018-10-24 16:03:41
【问题描述】:

我正在尝试构建一个 MLP 模型,该模型采用由 9 列组成的数据集 这分别是一个样本(患者编号、时间单位为磨/秒、XY 和 Z 的标准化、峰度、偏度、俯仰、滚动和偏航、标签)。

1,15,-0.248010047716,0.00378335508419,-0.0152548459993,-86.3738760481,0.872322164158,-3.51314800063,0

1,31,-0.248010047716,0.00378335508419,-0.0152548459993,-86.3738760481,0.872322164158,-3.51314800063,0

1,46,-0.267422664673,0.0051143782875,-0.0191247001961,-85.7662354031,1.0928406847,-4.08015176908,0

1,62,-0.267422664673,0.0051143782875,-0.0191247001961,-85.7662354031,1.0928406847,-4.08015176908,0

这是我的代码,我的代码没有错误,但是有和没有特征的结果是一样的..所以我问我是否使用正确的方法将这些特征输入模型。

from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
import pandas as pd
import itertools
import math
np.random.seed(7)

train = np.loadtxt("featwithsignalsTRAIN.txt", delimiter=",")
test = np.loadtxt("featwithsignalsTEST.txt", delimiter=",")

x_train = train[:,[2,3,4,5,6,7]]
x_test = test[:,[2,3,4,5,6,7]]
y_train = train[:,8]
y_test = test[:,8]

model = Sequential()
model.add(Dense(500, input_dim=6, activation='relu'))
model.add(Dense(300,  activation='relu'))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy' , optimizer='adam', metrics=['accuracy'])
# Fit the model
batch_size = 128
epochs = 10

hist = model.fit(x_train, y_train,
      batch_size=batch_size,
      epochs=epochs,
      verbose=2,
      )
avg = np.mean(hist.history['acc'])
print('The Average Testing Accuracy is', avg)
##Evaluate the model
score=model.evaluate(x_test, y_test, verbose=2)
print(score)

【问题讨论】:

  • 如何在没有这些特征的情况下训练模型?另外,你在比较什么结果?我看不出做 np.mean(hist.history['acc']) 背后的目的。这将为您提供过去所有训练时期的平均准确度。您应该比较的唯一准确度值是最后一个。
  • 特征在数据集中.. x_train = train[:,[2,3,4,5,6,7]]..这行代码需要6个特征
  • 在深度学习模型中输入特征是否正确?
  • 我相信模型不会受到这些特征的影响,这就是为什么我需要知道如何以正确的方式提供这些特征以使模型输出具有更高准确性的新特征跨度>

标签: python python-3.x neural-network keras deep-learning


【解决方案1】:

您的模型没有任何问题,但您的模型可能没有学到任何有用的东西。可能是你使用的学习太高或太小,你需要更多的 epoch,或者只是你的特征没有用。

以下是一些建议:

您可以直接向 fit 方法添加一个验证集,该方法将在每个 epoch 结束时在该集上计算相同的指标,并允许您查看您的模型是否学到了有用的东西,或者它是否只是在训练中过度拟合无需等待模型完成训练即可设置。 (确保使用 verbose = 1 或 2 来查看训练过程)。

model.fit( ... , validation_data = (x_test , y_test) , ...)

我看到你使用了历史回调。一个好的做法是查看准确性如何从一个时期变化到另一个时期,而不是取平均值。这使您可以查看您的网络是否有效地学习了一些东西。网络很少会在第一个时期收敛。

您知道您的功能的“有用性”吗?您可以通过在创建模型之前执行探索性分析或拟合更“传统”的模型(线性回归、决策树、随机森林......)来了解这一点。强烈建议在拟合神经网络之前进行,这也可以让您比较不同类型的模型,看看您是否真的需要使用神经网络。

如果您确定您的特征至少比随机猜测的性能更好,请尝试使用学习率。高学习率可能会导致模型超过最小值,而学习率太小可能会导致模型学习非常缓慢或陷入局部最小值。您也可以尝试调整 epoch 的数量。

【讨论】:

  • 我添加的新功能是峰度、偏度、俯仰、滚动和偏航,我需要使用它们来查看它们对腿部症状患者的效果
  • 例如每个患者的步长、步行速度等,以及这些特征如何帮助我预测症状
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
  • 2018-10-27
  • 1970-01-01
  • 1970-01-01
  • 2019-08-14
  • 2016-11-11
相关资源
最近更新 更多