Numpy 我应该学习哪些资源来计算内核大小?

Numpy 我应该学习哪些资源来计算内核大小?,numpy,machine-learning,keras,deep-learning,lstm,Numpy,Machine Learning,Keras,Deep Learning,Lstm,我正在尝试使用卷积神经网络构建Softmax分类器,但我一直从keras得到以下错误: 输入形状为[?,1,1,64]的“max_poolg1d_1/MaxPool”(op:“MaxPool”)从1中减去4导致的负维度大小 我正在使用以下大小的重塑数据集: 列车x(624,3,9) 一次热编码后的序列y(624,2) 测试_x(150,3,9) 一次热编码后的测试_y(150,2) 将三维numpy阵列从(624,27)矩阵重塑为(624,3,9)矩阵,依此类推 老实说,我认为问题来自计算内核大

我正在尝试使用卷积神经网络构建Softmax分类器,但我一直从keras得到以下错误:

输入形状为[?,1,1,64]的“max_poolg1d_1/MaxPool”(op:“MaxPool”)从1中减去4导致的负维度大小

我正在使用以下大小的重塑数据集:

列车x(624,3,9) 一次热编码后的序列y(624,2) 测试_x(150,3,9) 一次热编码后的测试_y(150,2)

将三维numpy阵列从(624,27)矩阵重塑为(624,3,9)矩阵,依此类推

老实说,我认为问题来自计算内核大小和池大小

我应该阅读哪些资源,才能以y网络允许的格式获取我的输入

非常感谢

from numpy import mean
from numpy import std
from numpy import dstack
from pandas import read_csv
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Flatten
from keras.layers import Dropout
from keras.layers.convolutional import Conv1D
from keras.layers.convolutional import MaxPooling1D
from keras.utils import to_categorical
from keras import layers
import numpy as np
import matplotlib.pyplot as plt

f=open('data/data_shuffled.csv')
data=f.read()
f.close()
lines=data.split('\n')
header=lines[0].split(',')
lines=lines[1:625]
train_x=np.zeros(((len(lines)),len(header)))
for i, line in enumerate(lines):
    values=[float(x) for x in line.split(',')[0:]]
    train_x[i,:]=values

f=open('data/labels_shuffled.csv')
data=f.read()
f.close()
lines=data.split('\n')
header=lines[0].split(',')
lines=lines[1:625]
train_y=np.zeros(((len(lines)),len(header)))
for i, line in enumerate(lines):
    values=[float(x) for x in line.split(',')[0:]]
    train_y[i,:]=values


f=open('data/data_shuffled.csv')
data=f.read()
f.close()
lines=data.split('\n')
header=lines[0].split(',')
lines=lines[626:776]
test_x=np.zeros(((len(lines)),len(header)))
for i, line in enumerate(lines):
    values=[float(x) for x in line.split(',')[0:]]
    test_x[i,:]=values


f=open('data/labels_shuffled.csv')
data=f.read()
f.close()
lines=data.split('\n')
header=lines[0].split(',')
lines=lines[626:776]
test_y=np.zeros(((len(lines)),len(header)))
for i, line in enumerate(lines):
    values=[float(x) for x in line.split(',')[0:]]
    test_y[i,:]=values

#reshaping data to have samples.
train_x=train_x.reshape(624,3,9)
test_x=test_x.reshape(150,3,9)


#one hot encoding
train_y=to_categorical(train_y)
test_y=to_categorical(test_y)



verbose, epochs, batch_size = 0, 10000, 32
n_timesteps, n_features, n_outputs = train_x.shape[1], train_x.shape[2], train_y.shape[1]
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu',input_shape=(n_timesteps,n_features)))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(n_outputs, activation='softmax'))
model.summary()
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# fit network
history=model.fit(train_x, train_y, epochs=epochs, batch_size=batch_size, verbose=verbose)
model.evaluate(test_x, test_y, batch_size=batch_size, verbose=1)
只需要得到一个模型预测,1或0


请帮助,

您的每个输入大小仅为(3,9),并且在两个Conv1D筛选器之后,每个筛选器的大小将为(1,1),就像错误状态一样,因此大小为2的MaxPoolg1d在这里不起作用


一个解决方案可能是从Max POLLIN中去掉<代码> POLLYSIZE=2 ,因为您的特征大小已经是一个单一值(即,您可以将其视为来自最大池的结果并向前移动)。

是的,它在调优后工作得更好。非常感谢!