写这个主要是记录自己实习期间的工作。
参考的是本篇文章【keras】一维卷积神经网络做回归
被分配到完成一个工艺流程中各工艺参数对产品的一个功效的回归预测。
这边先给出一部分数据,红框框出来的是我们想预测的一个label。
而其他的都是用于网络输入的特征值。
首先是数据集的导入,训练集和测试集的划分
df = pd.read_csv(r"Table_5_6_Output_Input_NoNAN.csv")
X = np.hstack((df.values[:, 1:6],df.values[:, 7:])).astype(float)
# 增加一维轴
Y = df.values[:, 6]
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)
接下来是定义网络模型
采用的是8层的一维卷积+最大池化+Dropout层,这样的好处是可以丢弃影响较小的特征,保留有效的特征,防止过拟合。
loss函数采用的是均方差公式
# 定义一个神经网络
model = Sequential()
model.add(Conv1D(16, 3, input_shape=(84, 1), activation='relu'))
model.add(Conv1D(16, 3, activation='relu'))
model.add(MaxPooling1D(3))
model.add(Dropout(rate=0.2))
model.add(Conv1D(64, 3, activation='relu', ))
model.add(Conv1D(64, 3, activation='relu'))
model.add(MaxPooling1D(3))
model.add(Dropout(rate=0.2))
model.add(Conv1D(128, 3, activation='relu'))
model.add(Conv1D(128, 3, activation='relu'))
model.add(MaxPooling1D(3))
model.add(Dropout(rate=0.2))
model.add(Conv1D(64, 3, activation='relu', padding='same'))
model.add(Conv1D(64, 3, activation='relu', padding='same'))
model.add(MaxPooling1D(3, padding="same"))
model.add(Dropout(rate=0.2))
model.add(Flatten())
model.add(Dense(1, activation='linear'))
plot_model(model, to_file='model_linear.png',