[英]How to find input_shape of Convolutional Neural Network if I am trying to fit the data from pandas dataframe?
[英]How to find input_shape of Convolutional Neural Network when we are trying to fit the data from pandas dataframe?
我有一个包含 321 个样本和 43 个特征的 Pandas 数据框 X_train。 此外,y_train 中有 18 个不同的类。
强文本我想在我的数据上训练一个 CNN,但我无法在 Pandas 数据帧的情况下提供输入形状。
X.shape, y.shape
((321, 43), (321,))
X = np.array(X)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0, stratify = y)
X_train.shape, X_test.shape
((256, 43), (65, 43))
inputs = np.concatenate((X_train, X_test), axis=0)
targets = np.concatenate((y_train, y_test), axis=0)
inputs.shape, targets.shape
((321, 43), (321,))
在我模型的第一层中,我在使用 input_shape 时遇到了问题。
我是 CNN 的新手,所有教程都使用了图像,它们只是将高度、宽度和通道作为 input_shape 的参数传入。
fold_no = 1
for train, test in kfold.split(inputs, targets):
model = Sequential()
**model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(???)))**
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dense(18, activation='softmax'))
model.compile(optimizer=Adam(learning_rate = 0.001),
loss = 'sparse_categorical_crossentropy',
metrics = ['accuracy'])
history = model.fit(inputs[train], targets[train], batch_size=5, epochs=50, validation_split=0.2, verbose=1)
scores = model.evaluate(inputs[test], targets[test], verbose=0)
fold_no = fold_no + 1
我在第一层遇到 input_shape 问题:
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(???)))
我尝试将输入形状设置为以下格式:
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(None, train.shape[1])))
但我收到以下错误:
我也试过这种方式:
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(321, 43)))
我还尝试了以下格式:
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(None, 43)))
Conv1D 将 3D 形状作为 input ,但第一个维度是批量大小,因此您可以将其忽略为input_shape
。 其他 2 个维度是 (steps, input_dim)。
在处理数字或文本数据时,两个维度通常是 (a) 您希望 CNN 层一次处理多少连续行,(b) 行中有多少特征。 如果您的数据自然地被分割成特定长度(可能是 24,一天中的几个小时,或三元组中的 3 个单词),您将需要专门设置steps
维度。 它还会影响您的输出形状,即(steps-kernel_size+1, filters)
。 尝试使用一些不同的形状并查看模型摘要以了解它们是如何变化的。
但正如文档所说,您也可以使用None
作为您的步骤,例如(None, 128) for variable-length sequences of 128-dimensional vectors
。
所以基本上,我建议这样做, inputs[train].shape[1]
应该是43:
input_shape=(None, inputs[train].shape[1])
您还可以尝试完整长度的数据集,例如 (321, 43):
input_shape=inputs[train].shape
张量 =1D 样本或数据点有多少个数字或特征 = 和样本数。
在这种情况下
样本1或向量=[x0,x1,x2,...,ystando],样本总数为:321,特征总数=31,将有张量的input_shape=(321,43)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.