ML_05 CNN

卷积的公式

要逆转一下然后点乘

卷积后的图像大小

同时如果我们在mm大小的图像用nn的卷积核之后会得到(m+n-1)平方大小的图像

Faltung anschaulich

卷积后图像看上去确实没什么变化,会把重要特征都保留下来
缺少一个图

为什么要用CNN

用KNN的话就会需要很多的w
100个像素点的话每一个Neuron在第一层就会有100个w。50个Neuron的话就5000个w,而且不是每个图像点都有用
而且也有可能会有很多相似的特征

Pooling

Max Pooling
Mean Pooling

Faltung im Detail

RGB三层,用一个FILTER,也就是3层变1层

STRIDE

卷积层每次移动的步数
m=7,n=3
Stride 2
(7-3)/2+1=3

Padding

在输入图像四周补像素,用于重视图像边界,不过有可能增加图像不存在的特征

Dropout

减少Overfitting
每一次训练不训练全部neuron
作用:减少neuron之间的关联

Initialisierung der Gewichte

Random Initialiyation
Fixed Feature Extractor
Fine-Tuning von trainiertem Netz (meist frühe Schichten)
Pretrained Initialization von trainiertem Netz (nur Initialisierung

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本文将介绍如何使用Keras实现CNN+BiLSTM+Attention的多维(多变量)时间序列预测。我们将使用一个包含多个变量的数据集,其中每个变量都是时间序列。我们将使用CNN来提取每个变量的特征,使用BiLSTM来捕捉时序信息,并使用Attention机制来加强对重要特征的关注。 ## 数据集 我们将使用一个包含12个变量的数据集,该数据集描述了美国一家电力公司的一年内的电力消费情况。其中每个变量都是时间序列。我们将使用前11个变量来预测第12个变量,即电力消费。数据集可以从以下链接下载: https://archive.ics.uci.edu/ml/datasets/ElectricityLoadDiagrams20112014 在这个数据集中,我们有321个时间点,每个时间点包含12个变量。我们将使用前300个时间点作为训练集,后21个时间点作为测试集。 ## 数据预处理 首先,我们需要将数据加载到内存中,并将其分为训练集和测试集。我们还需要对数据进行标准化处理,使其在0到1之间。 ```python import pandas as pd import numpy as np from sklearn.preprocessing import MinMaxScaler data = pd.read_csv('LD2011_2014.csv', parse_dates=[0], index_col=0) train_data = data.iloc[:300, :] test_data = data.iloc[300:, :] scaler = MinMaxScaler() train_data = scaler.fit_transform(train_data) test_data = scaler.transform(test_data) ``` 接下来,我们需要将数据转换为可以输入到CNN模型中的格式。我们将使用一个滑动窗口来生成输入序列和输出序列。在这个例子中,我们将使用5个时间点的历史数据来预测下一个时间点的电力消费。我们将使用一个变量来预测另一个变量,因此我们需要为每个变量生成一个输入序列和一个输出序列。最终,我们将得到一个形状为(295, 5, 1, 11)的训练集输入张量,其中295是输入序列的数量,5是序列长度,1是每个时间点的特征数量(我们只使用一个变量),11是总共的变量数量。 ```python def create_dataset(data, look_back): X, y = [], [] for i in range(len(data) - look_back - 1): X.append(data[i:(i + look_back), :, :]) y.append(data[i + look_back, :, 10]) return np.array(X), np.array(y) look_back = 5 trainX, trainY = create_dataset(train_data, look_back) testX, testY = create_dataset(test_data, look_back) ``` ## 模型构建 我们将使用Keras构建模型。我们将使用一个具有多个输入和输出的函数式API。我们将使用一个CNN层来提取每个变量的特征,然后使用一个BiLSTM层来捕捉时序信息。最后,我们将使用一个Attention层来加强对重要特征的关注。 ```python from keras.layers import Input, Dense, Conv2D, MaxPooling2D, Flatten, LSTM, Bidirectional, concatenate, Reshape, Permute, Multiply from keras.models import Model inputs = [] outputs = [] for i in range(11): input_i = Input(shape=(look_back, 1, 1)) inputs.append(input_i) conv1_i = Conv2D(filters=32, kernel_size=(3, 1), activation='relu')(input_i) conv2_i = Conv2D(filters=32, kernel_size=(3, 1), activation='relu')(conv1_i) pool_i = MaxPooling2D(pool_size=(2, 1))(conv2_i) flat_i = Flatten()(pool_i) outputs.append(flat_i) merged = concatenate(outputs) reshape = Reshape((11, -1))(merged) permute = Permute((2, 1))(reshape) attention_probs = Dense(11, activation='softmax', name='attention_probs')(permute) attention_mul = Multiply()([reshape, attention_probs]) lstm = Bidirectional(LSTM(units=64, return_sequences=False))(attention_mul) output = Dense(units=1)(lstm) model = Model(inputs=inputs, outputs=output) model.compile(loss='mean_squared_error', optimizer='adam') ``` ## 模型训练 我们将使用模型拟合训练集,并在测试集上评估模型性能。 ```python model.fit([trainX[:, :, :, i] for i in range(11)], trainY, epochs=50, batch_size=32, verbose=2) testPredict = model.predict([testX[:, :, :, i] for i in range(11)]) testPredict = scaler.inverse_transform(testPredict) testY = scaler.inverse_transform(testY) rmse = np.sqrt(np.mean((testPredict - testY) ** 2)) print('Test RMSE: %.3f' % rmse) ``` ## 结论 在这篇文章中,我们介绍了如何使用Keras实现CNN+BiLSTM+Attention的多维(多变量)时间序列预测。我们使用一个包含多个变量的数据集,其中每个变量都是时间序列。我们使用CNN来提取每个变量的特征,使用BiLSTM来捕捉时序信息,并使用Attention机制来加强对重要特征的关注。最终,在测试集上,我们得到了一个RMSE为0.038的模型,说明我们的模型能够很好地预测电力消费。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值