我想训练一个模型,根据身体信号来预测一个人的情绪。我有一个物理信号并将其用作输入功能;
ecg(心电图)
我想使用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()
方法?预先感谢。
答案 0 :(得分:2)
要提取可传递给另一算法的特征向量,在softmax层之前需要一个完全连接的层。这样的事情会在您的softmax层之前添加一个128维的层:
bind_rows(mget(paste0("df", 1:247)), .id = "number")
如果您随后运行package com.jcg.csv2excel;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.ss.usermodel.ConditionalFormattingRule;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.SheetConditionalFormatting;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Format {
public static void main(String[] args) throws IOException {
String excelFilePath = "C:\\Troop\\Csv_To_Excel\\config\\EXCEL_DATA.xlsx";
FileInputStream inputStream = new FileInputStream(new File(excelFilePath));
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
//workbook.getSheet(Sheet);
Sheet sheet = workbook.getSheetAt(0);
SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule("=IF(C5 > B5 + TIME(0,30,0),TRUE,FALSE)");
org.apache.poi.ss.usermodel.PatternFormatting pattern_Fmt = rule1.createPatternFormatting();
pattern_Fmt.setFillBackgroundColor(IndexedColors.YELLOW.index);
ConditionalFormattingRule rule2 = sheetCF.createConditionalFormattingRule("=IsBlank(B7:X16)");
org.apache.poi.ss.usermodel.PatternFormatting patternFmt = rule2.createPatternFormatting();
patternFmt.setFillBackgroundColor(IndexedColors.RED.index);
ConditionalFormattingRule [] cfRules =
{
rule1, rule2
};
CellRangeAddress[] regions = {
CellRangeAddress.valueOf("B7:B16")
};
sheetCF.addConditionalFormatting(regions, cfRules);
inputStream.close();
FileOutputStream outputStream = new FileOutputStream(excelFilePath);
workbook.write(outputStream);
workbook.close();
outputStream.close();
}
}
,则可以看到图层的名称:
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(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(3, activation = 'softmax'))
对网络进行培训后,您可以创建一个新模型,其中输出层变为'dense_7',它将生成128维特征向量:
model.summary()