准备向一维CNN馈送数据 [英] Preparing feeding data to 1D CNN

查看:60
本文介绍了准备向一维CNN馈送数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到了与重塑有关的类似问题一维CNN的数据:

I am getting into a similar problem with reshaping data for 1-D CNN:

我正在从具有24,325行的csv文件中加载数据(训练和测试数据集).每行是一个由256个数字组成的向量-独立变量加上11个预期结果(标签)[[0,0,0,0,1,0,0,0,0,0,0]

I am loading data (training and testing data sets ) from a csv file with 24,325 lines. Each line is a vector of 256 numbers - independent variables plus 11 numbers of expected outcome ( labels ) [0,0,0,0,1,0,0,0,0,0,0]

我正在使用TensorFlow后端.

代码如下:

    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np

   #Importing training set
   training_set = pd.read_csv("Data30.csv")
   X_train = training_set.iloc[:20000, 3 :-11].values
   y_train = training_set.iloc[:20000, -11:-1].values

   #Importing test set
   test_set = pd.read_csv("Data30.csv")
   X_test = training_set.iloc[ 20001:, 3 :-11].values
   y_test = training_set.iloc[ 20001:, -11:].values

    X_train /= np.max(X_train) # Normalise data to [0, 1] range
    X_test /= np.max(X_test) # Normalise data to [0, 1] range

    print("X_train.shape[0] = " + str(X_train.shape[0]))
    print("X_train.shape[1] = " + str(X_train.shape[1]))
    print("y_train.shape[0] = " + str(y_train.shape[0]))
    print("y_train.shape[1] = " + str(y_train.shape[1]))
    print("X_test.shape[0] = " + str(X_test.shape[0]))
    print("X_test.shape[1] = " + str(X_test.shape[1]))

这就是我得到的:

X_train.shape [0] = 20000

X_train.shape[0] = 20000

X_train.shape1 = 256

X_train.shape1 = 256

y_train.shape [0] = 20000

y_train.shape[0] = 20000

y_train.shape1 = 11

y_train.shape1 = 11

X_test.shape [0] = 4325

X_test.shape[0] = 4325

X_test.shape1 = 256

X_test.shape1 = 256

 #Convert data into 3d tensor
# Old Version 
# X_train = np.reshape(X_train,(1,X_train.shape[0],X_train.shape[1]))
# X_test = np.reshape(X_test,(1,X_test.shape[0],X_test.shape[1]))

**# New Correct Version based on the Answer:**
X_train = np.reshape(X_train,( X_train.shape[0],X_train.shape[1], 1 ))
X_test = np.reshape(X_test,( X_test.shape[0],X_test.shape[1], 1 ))

print("X_train.shape[0] = " + str(X_train.shape[0]))
print("X_train.shape[1] = " + str(X_train.shape[1]))
print("X_test.shape[0] = " + str(X_test.shape[0]))
print("X_test.shape[1] = " + str(X_test.shape[1]))

这是重塑的结果:

X_train.shape [0] = 1

X_train.shape[0] = 1

X_train.shape1 = 20000

X_train.shape1 = 20000

X_test.shape [0] = 1

X_test.shape[0] = 1

X_test.shape1 = 4325

X_test.shape1 = 4325

   #Importing convolutional layers
   from keras.models import Sequential
   from keras.layers import Convolution1D
   from keras.layers import MaxPooling1D
   from keras.layers import Flatten
   from keras.layers import Dense
   from keras.layers import Dropout
   from keras.layers.normalization import BatchNormalization

#Initialising the CNN
classifier = Sequential()

#1.Multiple convolution and max pooling
classifier.add(Convolution1D(filters=8, kernel_size=11, activation="relu", input_shape=( 256, 1 )))
classifier.add(MaxPooling1D(strides=4))
classifier.add(BatchNormalization())
classifier.add(Convolution1D(filters=16, kernel_size=11, activation='relu'))
classifier.add(MaxPooling1D(strides=4))
classifier.add(BatchNormalization())
classifier.add(Convolution1D(filters=32, kernel_size=11, activation='relu'))
classifier.add(MaxPooling1D(strides=4))
classifier.add(BatchNormalization())
#classifier.add(Convolution1D(filters=64, kernel_size=11,activation='relu'))
    #classifier.add(MaxPooling1D(strides=4))

#2.Flattening
classifier.add(Flatten())

#3.Full Connection
classifier.add(Dropout(0.5))
classifier.add(Dense(64, activation='relu'))
classifier.add(Dropout(0.25))
classifier.add(Dense(64, activation='relu'))
classifier.add(Dense(1, activation='sigmoid'))

#Configure the learning process
classifier.compile(optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"])

#Train!
classifier.fit_generator(training_set,
                     steps_per_epoch= 100,
                     nb_epoch = 200,
                     validation_data = (X_test,y_test),
                     validation_steps = 40)

score = classifier.evaluate(X_test, y_test)

这是我得到的错误:

回溯(最近通话最近一次):

Traceback (most recent call last):

文件"C:/Conda/ML_Folder/CNN Data30.py",第85行,在 classifier.fit_generator(X_train,steps_per_epoch = 10,epochs = 10,validation_data =(X_test,y_test))

File "C:/Conda/ML_Folder/CNN Data30.py", line 85, in classifier.fit_generator(X_train, steps_per_epoch=10, epochs=10, validation_data=(X_test,y_test))

文件"C:\ Conda \ lib \ site-packages \ keras \ legacy \ interfaces.py",包装中的第87行 返回func(* args,** kwargs)

File "C:\Conda\lib\site-packages\keras\legacy\interfaces.py", line 87, in wrapper return func(*args, **kwargs)

fit_generator中的文件"C:\ Conda \ lib \ site-packages \ keras \ models.py",行1121 initial_epoch = initial_epoch)

File "C:\Conda\lib\site-packages\keras\models.py", line 1121, in fit_generator initial_epoch=initial_epoch)

文件"C:\ Conda \ lib \ site-packages \ keras \ legacy \ interfaces.py",包装中的第87行 返回func(* args,** kwargs)

File "C:\Conda\lib\site-packages\keras\legacy\interfaces.py", line 87, in wrapper return func(*args, **kwargs)

文件"C:\ Conda \ lib \ site-packages \ keras \ engine \ training.py",行1978,在fit_generator中 val_x,val_y,val_sample_weight)

File "C:\Conda\lib\site-packages\keras\engine\training.py", line 1978, in fit_generator val_x, val_y, val_sample_weight)

文件_standardize_user_data中的文件"C:\ Conda \ lib \ site-packages \ keras \ engine \ training.py",行1378 exception_prefix ='input')

File "C:\Conda\lib\site-packages\keras\engine\training.py", line 1378, in _standardize_user_data exception_prefix='input')

_standardize_input_data中的第144行的文件"C:\ Conda \ lib \ site-packages \ keras \ engine \ training.py" str(array.shape))

File "C:\Conda\lib\site-packages\keras\engine\training.py", line 144, in _standardize_input_data str(array.shape))

ValueError:检查输入时出错:预期conv1d_1_input具有形状(None,256,1)但具有形状(1,4325,256)的数组

ValueError: Error when checking input: expected conv1d_1_input to have shape (None, 256, 1) but got array with shape (1, 4325, 256)

您能帮我修复代码吗?

推荐答案

形状应为(batchSize, length, channels)

所以:(20000,256,1)(20000,11)

详细信息:您的最后一个Dense必须输出11,因此:Dense(11,...)

Detail: your last Dense must output 11, so: Dense(11,...)

这篇关于准备向一维CNN馈送数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆