有一串数据想用一维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等层次;调整参数来产生理想结果;训练过程控制好过拟合;这些才是充满魅力的地方。只有真正去多次实验才能得到最优方案,相信题主一定能克服困难!