求教 如何用Keras进行一维卷积预测

有一串数据想用一维cnn的方法来进行处理 预测,求教

 12.0600

  12.6228

  10.0500

  10.1706

   9.3264

   8.3616

   9.6882

  13.9494

  15.0750

  13.0248

  16.8840

  15.9996

  16.4418

  17.6076

  16.3614

  14.9946

  13.7886

  19.3362

  23.6778

  19.1754

  20.8236

  25.2054

  25.3260

  26.2104

  33.0042

  36.5820

  29.1048

  27.4164

  26.4516

  18.2508

  13.1856

  18.0096

  19.6980

  22.1502

  22.2306

  19.6176

  16.6428

  16.9242

  21.0648

  23.4366

  21.9492

  24.2808

  28.3008

  29.2656

  28.2204

  28.2606

  36.0996

  41.4864

  43.7778

  37.2654

  45.3858

  36.9840

  40.0392

  44.0190

  42.1296

  37.7478

  38.9136

  41.1648

  38.7126

  41.3256

  44.9436

  39.8382

  43.3356

  43.8180

  39.1146

  47.2350

  49.4862

  43.6974

  39.5568

  33.4464

  28.4616

  33.8886

  34.8936

  29.1852

  25.7280

  24.1200

  25.2858

  24.6024

  21.7884

  19.9794

  22.9944

  19.8588

  21.4266

  26.2908

  23.9190

  25.9290

  27.6576

  30.3108

  34.9740

  32.5218

  36.7026

  41.8080

  46.0692

  46.3908

  45.0240

  42.4512

你这个数据是几维的?一般CNN都需要输入是3维数据

一维卷积也需要三维数据嘛

这不就是时间序列嘛,有点懵

import numpy as np
import keras



# 创建 1 维向量,并扩展维度适应 Keras 对输入的要求, data_1d 的大小为 (1, 96, 1)
data = np.loadtxt('temp.csv')       # 96
data = np.expand_dims(data, 0)      # 1*96
data = np.expand_dims(data, 2)      # 1*96*1


# 定义卷积层
filters = 1  # 卷积核数量为 1
kernel_size = 5  # 卷积核大小为 5
convolution_1d_layer = keras.layers.convolutional.Conv1D(
    filters, kernel_size, strides=1, padding='valid', input_shape=(96, 1), activation="relu", name="convolution_1d_layer")


# 定义最大化池化层
max_pooling_layer = keras.layers.MaxPool1D(
    pool_size=5, strides=1, padding="valid", name="max_pooling_layer")


# 平铺层,调整维度适应全链接层
reshape_layer = keras.layers.core.Flatten(name="reshape_layer")


# 定义全链接层
full_connect_layer = keras.layers.Dense(5, kernel_initializer=keras.initializers.RandomNormal(
    mean=0.0, stddev=0.1), bias_initializer="random_normal", use_bias=True, name="full_connect_layer")


# 编译模型
model = keras.Sequential()
model.add(convolution_1d_layer)
model.add(max_pooling_layer)
model.add(reshape_layer)
model.add(full_connect_layer)


# 打印 full_connect_layer 层的输出
output = keras.Model(inputs=model.input, outputs=model.get_layer(
    'full_connect_layer').output).predict(data)
print(output)


# 打印网络结构
print(model.summary())

请问这个输出的是什么意思


神经网络模型

结果是这个[[-0.00393183 -0.07687812 -0.01885908 0.07820556 -0.10424655]],代表的是什么 ,时间序列模型预测出的结果不应该也是一串数嘛

时间序列可以用rnn

但是老师想往这方面发展发展

目标检测?

可详细聊

假设题主是知道线性回归的,先用简单线性回归来类比一下这个问题;这个问题就是用前几个值来预测当前的值:Xt = W1*Xt-1 + ... + Wn*Xt-n + b。


你需要指定由多少个数值 - n来预测当前值Xt,模型训练后拟合出合适的参数W1 - Wn和常数b。


用一维CNN模型,你除了需要指定n外,还需要指定另外两个参数:卷积核大小k,和卷积核的数量m。一维卷积的作用是把k个数值做加权相加,k个数值的权重W1 - Wk在训练后得出。这个说法叫自动发现数据的重点特征。其实本质是不是跟上面线性回归的原理很像呢?


不同之处在于你可以扩展更多卷积层来学习更抽象的特征;不同卷积核的计算结果也不再是单纯线性相加,通过各种激活函数可以得到非常复杂的非线性输出。


至于用keras来实现,相信你了解基本api和一些常规的数据处理方法后,这应该不难。如何能通过组合好网络结构:CNN、Pooling、Flatten、Dropout、Dense等层次;调整参数来产生理想结果;训练过程控制好过拟合;这些才是充满魅力的地方。只有真正去多次实验才能得到最优方案,相信题主一定能克服困难!