Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Keras 准备向1D CNN馈送数据_Keras_Convolution - Fatal编程技术网

Keras 准备向1D CNN馈送数据

Keras 准备向1D CNN馈送数据,keras,convolution,Keras,Convolution,我在为1-D CNN重塑数据时遇到问题: 我正在从一个包含24325行的csv文件加载数据(培训和测试数据集)。每行是256个数字的向量-自变量加上11个预期结果数字(标签)[0,0,0,0,1,0,0,0,0,0] 我正在使用TensorFlow后端。 代码如下所示: import matplotlib.pyplot as plt import pandas as pd import numpy as np #Importing training set

我在为1-D CNN重塑数据时遇到问题:

我正在从一个包含24325行的csv文件加载数据(培训和测试数据集)。每行是256个数字的向量-自变量加上11个预期结果数字(标签)[0,0,0,0,1,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_列形状[0]=20000

X_train.shape=256

y_列形状[0]=20000

y_train.shape=11

X_检验.形状[0]=4325

X_test.shape=256

这是整形的结果:

X_列形状[0]=1

X_列车形状=20000

X_检验.形状[0]=1

X_测试形状=4325

这是我得到的错误:

回溯(最近一次呼叫最后一次):

文件“C:/Conda/ML_Folder/CNN Data30.py”,第85行,在 分类器.fit_生成器(X_序列,每_历元的步数=10,历元=10,验证_数据=(X_测试,y_测试))

文件“C:\Conda\lib\site packages\keras\legacy\interfaces.py”,第87行,在包装器中 返回函数(*args,**kwargs)

文件“C:\Conda\lib\site packages\keras\models.py”,第1121行,在fit_generator中 初始_历元=初始_历元)

文件“C:\Conda\lib\site packages\keras\legacy\interfaces.py”,第87行,在包装器中 返回函数(*args,**kwargs)

文件“C:\Conda\lib\site packages\keras\engine\training.py”,第1978行,在fit\u generator中 val_x,val_y,val_样品重量)

文件“C:\Conda\lib\site packages\keras\engine\training.py”,第1378行,在用户数据中 异常(前缀为“输入”)

文件“C:\Conda\lib\site packages\keras\engine\training.py”,第144行,输入数据 str(array.shape))

ValueError:检查输入时出错:预期conv1d_1_输入具有形状(无,256,1),但获得具有形状(14325,256)的数组

你能帮我修复代码吗?

形状应该是
(批量大小、长度、通道)

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

详细信息:您的最后一个
Dense
必须输出11,因此:
Dense(11,…)
形状应该是
(批大小、长度、通道)

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


细节:您最后一次的
Dense
必须输出11,因此:
Dense(11,…)

谢谢您,丹尼尔!现在唯一剩下的问题是分类器.fit_生成器的格式(训练集,每个历元的步数=100,nb_历元=200,验证数据=(X_测试,y_测试),验证步骤=40)据我所知,Keras Api 2.0已更改,它需要
每个历元的步骤数
作为每个历元从生成器提取的批次数。基本上,每个历元的步骤=每个历元的样本数/批量大小。然而,我仍然不明白在我的情况下什么是正确的参数!TypeError:“DataFrame”对象不是迭代器回溯(上次调用):文件“C:/Conda/ML_Folder/CNN Data30.py”,第94行,在验证中(步骤=40)文件“C:\Conda\lib\site packages\keras\legacy\interfaces.py”,第87行,在包装器返回函数(*args,**kwargs)文件“C:\Conda\lib\site packages\keras\models.py”,第1121行,在fit_generator initial_epoch=initial_epoch)文件“C:\Conda\lib\site packages\keras\legacy\interfaces.py”的第87行,包装器返回函数(*args,**kwargs)文件“C:\Conda\lib\site packages\keras\engine\training.py”的第2011行,在fit_generator generator\u output=next(output_generator)中StopIteration似乎
training\u set
是一个名为dataframe的对象。您必须有一个
生成器
。一个特定的python对象。但是,如果
training\u set
是您所有的数据,并且您希望立即对其进行训练,则可以使用
fit
而不是
fit\u generator
。谢谢您,丹尼尔!现在唯一剩下的问题是分类器.fit_生成器的格式(训练集,每个历元的步数=100,nb_历元=200,验证数据=(X_测试,y_测试),验证步骤=40)据我所知,Keras Api 2.0已更改,它需要
每个历元的步骤数
作为每个历元从生成器提取的批次数。基本上,每个历元的步骤=每个历元的样本数/批量大小。然而,我仍然不明白在我的情况下什么是正确的参数!TypeError:“DataFrame”对象不是迭代器回溯(上次调用):文件“C:/Conda/ML_Folder/CNN Data30.py”,第94行,在验证中(步骤=40)文件“C:\Conda\lib\site packages\keras\legacy\interfaces.py”,第87行,在包装器返回函数(*args,**kwargs)文件“C:\Conda\lib\site packages\keras\models.py”,第1121行,在fit_generator initial_epoch=initial_epoch)文件“C:\Conda\lib\site packages\keras\legacy\interfaces.py”的第87行,包装器返回函数(*args,**kwargs)文件“C:\Conda\lib\site packages\keras\engine\training.py”的第2011行,在fit_generator generator\u output=next(output_generator)中StopIteration似乎
training\u set
是一个名为dataframe的对象。您必须有一个
生成器
。一个特定的python对象。但是,如果
training\u set
是所有数据的集合,并且您希望立即对其进行训练,则可以使用
fit
而不是
fit\u generator
 #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]))
   #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)