Keras 为多层感知器正确输入形状
Keras correct input shape for multilayer perceptron
我正在尝试在 keras 中制作一个基本的 MLP 示例。我的输入数据的形状为 train_data.shape = (2000,75,75)
,我的测试数据的形状为 test_data.shape = (500,75,75)
。 2000
和500
是训练和测试数据的样本数(也就是说数据的shape是(75,75)
,但是训练和测试数据有2000和500条).输出应该有两个 类.
我不确定网络第一层的 input_shape
参数使用什么值。使用 keras 存储库中 mnist 示例的代码,我有 (updated):
from six.moves import cPickle
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.utils import np_utils
from keras.optimizers import RMSprop
# Globals
NUM_CLASSES = 2
NUM_EPOCHS = 10
BATCH_SIZE = 250
def loadData():
fData = open('data.pkl','rb')
fLabels = open('labels.pkl','rb')
data = cPickle.load(fData)
labels = cPickle.load(fLabels)
train_data = data[0:2000]
train_labels = labels[0:2000]
test_data = data[2000:]
test_labels = labels[2000:]
return (train_data, train_labels, test_data, test_labels)
# Load data and corresponding labels for model
train_data, train_labels, test_data, test_labels = loadData()
train_labels = np_utils.to_categorical(train_labels, NUM_CLASSES)
test_labels = np_utils.to_categorical(test_labels, NUM_CLASSES)
print(train_data.shape)
print(test_data.shape)
model = Sequential()
model.add(Dense(512, input_shape=(5625,)))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(2))
model.add(Activation('softmax'))
model.summary()
model.compile(loss='categorical_crossentropy',
optimizer=RMSprop(),
metrics=['accuracy'])
history = model.fit(train_data, train_labels, validation_data=(test_data, test_labels),
batch_size=BATCH_SIZE, nb_epoch=NUM_EPOCHS,
verbose=1)
score = model.evaluate(test_data, test_labels, verbose=0)
print('Test score:', score[0])
print('Test accuracy:', score[1])
其中 5625
是 75 * 75(模拟 MNIST 示例)。我得到的错误是:
Error when checking model input: expected dense_input_1 to have 2 dimensions, but got array with shape (2000, 75, 75)
有什么想法吗?
来自 keras MLP 示例,https://github.com/fchollet/keras/blob/master/examples/mnist_mlp.py
# the data, shuffled and split between train and test sets
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(60000, 784)
X_test = X_test.reshape(10000, 784)
模型输入
model = Sequential()
model.add(Dense(512, input_shape=(784,)))
所以你应该改造你的火车并测试到 (2000,75*75) 和 (500,75*75)
train_data = train_data.reshape(2000, 75*75)
test_data = test_data.reshape(500, 75*75)
然后像您一样设置模型输入形状
model.add(Dense(512, input_shape=(75*75,)))
我正在尝试在 keras 中制作一个基本的 MLP 示例。我的输入数据的形状为 train_data.shape = (2000,75,75)
,我的测试数据的形状为 test_data.shape = (500,75,75)
。 2000
和500
是训练和测试数据的样本数(也就是说数据的shape是(75,75)
,但是训练和测试数据有2000和500条).输出应该有两个 类.
我不确定网络第一层的 input_shape
参数使用什么值。使用 keras 存储库中 mnist 示例的代码,我有 (updated):
from six.moves import cPickle
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.utils import np_utils
from keras.optimizers import RMSprop
# Globals
NUM_CLASSES = 2
NUM_EPOCHS = 10
BATCH_SIZE = 250
def loadData():
fData = open('data.pkl','rb')
fLabels = open('labels.pkl','rb')
data = cPickle.load(fData)
labels = cPickle.load(fLabels)
train_data = data[0:2000]
train_labels = labels[0:2000]
test_data = data[2000:]
test_labels = labels[2000:]
return (train_data, train_labels, test_data, test_labels)
# Load data and corresponding labels for model
train_data, train_labels, test_data, test_labels = loadData()
train_labels = np_utils.to_categorical(train_labels, NUM_CLASSES)
test_labels = np_utils.to_categorical(test_labels, NUM_CLASSES)
print(train_data.shape)
print(test_data.shape)
model = Sequential()
model.add(Dense(512, input_shape=(5625,)))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(2))
model.add(Activation('softmax'))
model.summary()
model.compile(loss='categorical_crossentropy',
optimizer=RMSprop(),
metrics=['accuracy'])
history = model.fit(train_data, train_labels, validation_data=(test_data, test_labels),
batch_size=BATCH_SIZE, nb_epoch=NUM_EPOCHS,
verbose=1)
score = model.evaluate(test_data, test_labels, verbose=0)
print('Test score:', score[0])
print('Test accuracy:', score[1])
其中 5625
是 75 * 75(模拟 MNIST 示例)。我得到的错误是:
Error when checking model input: expected dense_input_1 to have 2 dimensions, but got array with shape (2000, 75, 75)
有什么想法吗?
来自 keras MLP 示例,https://github.com/fchollet/keras/blob/master/examples/mnist_mlp.py
# the data, shuffled and split between train and test sets
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(60000, 784)
X_test = X_test.reshape(10000, 784)
模型输入
model = Sequential()
model.add(Dense(512, input_shape=(784,)))
所以你应该改造你的火车并测试到 (2000,75*75) 和 (500,75*75)
train_data = train_data.reshape(2000, 75*75)
test_data = test_data.reshape(500, 75*75)
然后像您一样设置模型输入形状
model.add(Dense(512, input_shape=(75*75,)))