CNN- 数据预处理

原文:https://www.cnblogs.com/luxiao/p/5534393.html

对于CNN输入的数据,常见的有三种处理方式:

     1.Mean subtraction.  将数据的每一维特征都减去平均值。在numpy 中 X -= np.mean(X, axis = 0)

     2.Normalization  归一化数据,使数据在相同尺度。 在numpy 中 X /= np.std(X, axis = 0)

 

     

     3. PCA and Whitening.  首先均值化数据,然后求协方差矩阵。 
      X -= np.mean(X, axis = 0) //求均值  

      cov = np.dot( X.T, X) / X.shape[0] // 求协方差矩阵

      U,S,V = np.linalg.svd(cov) //奇异值分解,其中 U 为特征向量,S为奇异值分解向量为特征向量的平方

      Xrot = np.dot(X, U) //去除数据相关性

      Xrot_reduced = np.dot(X, U[:,:100]) 降维到 100 维

     Xwhite = Xrot / np. sqrt(s + 1e-5) //白化数据 1e-5 为防止除0

     可视化数据:例子为CIFAR-10  images

   左边第一张图片为CIFAR-10 中的49张图片(每张图片有3072个特征),第二张图片为3072特征向量中的前144个特征,第三张图片为通过PCA降维降到144维,使用的是图二中的前144维,第四张图片为白化后的图片。

   常见的数据处理是 Mean substraction 和 Normalization.

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用TensorFlow实现CNN-GRU-Attention进行多变量时序特征提取的代码示例,包括输入数据预处理: ```python import tensorflow as tf from tensorflow.keras import layers, models # 数据预处理 def preprocess_data(data, n_steps, n_features): X, y = list(), list() for i in range(len(data)): end_ix = i + n_steps if end_ix > len(data) - 1: break seq_x, seq_y = data[i:end_ix, :-1], data[end_ix, -1] X.append(seq_x) y.append(seq_y) return tf.convert_to_tensor(X, dtype=tf.float32), tf.convert_to_tensor(y, dtype=tf.float32) # 构建CNN-GRU-Attention模型 def build_model(n_steps, n_features, n_outputs): # CNN inputs1 = layers.Input(shape=(n_steps, n_features, 1)) conv1 = layers.Conv2D(filters=64, kernel_size=(1,3), activation='relu')(inputs1) drop1 = layers.Dropout(0.5)(conv1) pool1 = layers.MaxPooling2D(pool_size=(1,2))(drop1) flat1 = layers.Flatten()(pool1) # GRU inputs2 = layers.Input(shape=(n_steps, n_features)) gru1 = layers.GRU(128, return_sequences=True)(inputs2) drop2 = layers.Dropout(0.5)(gru1) gru2 = layers.GRU(128)(drop2) # Attention attention = layers.concatenate([flat1, gru2]) attention = layers.Dense(64, activation='tanh')(attention) attention = layers.Dense(1, activation='softmax')(attention) attention = layers.Reshape((n_steps, 1))(attention) attention = layers.Lambda(lambda x: tf.keras.backend.repeat_elements(x, n_features, 2))(attention) attention = layers.Permute((2, 1))(attention) attention = layers.multiply([attention, inputs2]) attention = layers.Lambda(lambda x: tf.keras.backend.sum(x, axis=1))(attention) # 输出层 outputs = layers.Dense(n_outputs, activation='linear')(attention) model = models.Model(inputs=[inputs1, inputs2], outputs=outputs) model.compile(optimizer='adam', loss='mse') return model ``` 在上面的代码中,preprocess_data()函数用于将原始数据转换为可以输入模型的数据格式,其中参数n_steps表示每个样本的时间步数,n_features表示每个时间步的特征数,n_outputs表示模型输出的维度。build_model()函数用于构建CNN-GRU-Attention模型,其中包括CNN、GRU和Attention三个部分,最后是一个全连接层作为输出层。 需要注意的是,输入数据应该是一个形如(n_samples, n_steps, n_features)的三维张量,可以通过reshape()函数将其变为(n_samples, n_steps, n_features, 1)的四维张量,然后输入到CNN中进行特征提取。在Attention部分,我们将CNN提取的特征和GRU提取的特征拼接在一起,然后通过注意力机制来获取最终的特征表示。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值