【发布时间】:2019-09-17 21:58:29
【问题描述】:
我想训练一个模型来根据物理信号预测一个人的情绪。我有一个物理信号并将其用作输入特征;
心电图(心电图)
我想使用 CNN 架构从数据中提取特征,然后使用这些提取的特征来输入经典的“决策树分类器”。下面,您可以看到我的 CNN 方法没有决策树;
model = Sequential()
model.add(Conv1D(15,60,padding='valid', activation='relu',input_shape=(18000,1), strides = 1, kernel_regularizer=regularizers.l1_l2(l1=0.1, l2=0.1)))
model.add(MaxPooling1D(2,data_format='channels_last'))
model.add(Dropout(0.6))
model.add(BatchNormalization())
model.add(Conv1D(30, 60, padding='valid', activation='relu',kernel_regularizer = regularizers.l1_l2(l1=0.1, l2=0.1), strides=1))
model.add(MaxPooling1D(4,data_format='channels_last'))
model.add(Dropout(0.6))
model.add(BatchNormalization())
model.add(Flatten())
model.add(Dense(3, activation = 'softmax'))
我想编辑这段代码,以便在输出层中有工作的决策树,而不是model.add(Dense(3, activation = 'softmax'))。我试图像这样保存最后一个卷积层的输出;
output = model.layers[-6].output
当我打印出output 变量时,结果是这样的;
输出:Tensor("conv1d_56/Relu:0", shape=(?, 8971, 30), dtype=float32)
我猜,output 变量保存了提取的特征。现在,如何使用存储在 output 变量中的这些数据来提供我的 决策树 分类器模型?这是来自 scikit learn 的决策树;
from sklearn.tree import DecisionTreeClassifier
dtc = DecisionTreeClassifier(criterion = 'entropy')
dtc.fit()
我应该如何提供fit() 方法?提前致谢。
【问题讨论】:
-
你在做监督分类吗?你想联合训练你的 DL 模型和决策树(这是不可能的......)?您可以做的一件事是使用 FC 层训练您的 DL 模型,然后将其替换为决策树...
-
@ma3oun,是的,它是一个有监督的分类。我希望 CNN 模型从我的数据中提取特征,然后我将使用这些提取的特征来提供决策树模型。
-
一种方法是添加一些 FC 层并训练您的网络,然后使用您训练过的网络提取特征并将它们输入决策树(从而替换 FC 层)。另一种方法是训练自动编码器来提取特征,然后使用收缩数据向量作为决策树的输入......
标签: python tensorflow keras scikit-learn decision-tree