У меня есть ndarray, который выглядит как
[[array([0. , 0. ... 0. ])],
...
[array([0. , 0. ... 0. ])]]
, где каждый вложенный массив представляет собой одномерный массив из 784 значений np.float64
, когда я пытаюсь запустить Keras с первымслой, который выглядит как '' 'Dense (32, input_shape = (784,))' '' training_utils вызывает ValueError, потому что он думает, что мой массив имеет форму (1,), когда он ожидает (784,)
если я подпишу массив, я получу array[0].shape == (784,)
что я здесь не так делаю?Я пытался транспонировать, используя функцию keras.np_utils.to_categorical () и т. Д.
Я уверен, что это что-то простое, но мне не хватает этого
class netModel(object):
def __init__(self, model, TrainingData, Labels):
self.TrainingData = TrainingData
self.Labels = Labels
self.model = model
self.model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
def train(self):
self.model.fit(self.TrainingData, self.Labels)
y = mnConv.mnistConverter.convert("train-images.idx3-ubyte",
"train-labels.idx1-ubyte", 60000)
md = Sequential([
Dense(32, input_shape=(784,)),
Activation('relu'),
Dense(28),
Activation('sigmoid'),
Dense(10),
Activation('softmax'),
])
mod = netModel(md,td,lbl)
mod.train()
иФункция mnistCoverter выглядит так:
class mnistConverter(object):
def convert(imgf, labelf, n):
f = open(imgf, "rb")
l = open(labelf, "rb")
f.read(16)
l.read(8)
images = []
for i in range(n):
label, image = [np.ndarray(10,),np.ndarray(784,)]#shhh, Ignore this
lbl = ord(l.read(1))
np1 = np.float64(1)
np0 = np.float64(0)
for i in range(10):
if lbl == i:
label[i] = np1
else:
label[i] = np0
for j in range(28*28):
image[j] = fit(ord(f.read(1)))
images.append((lbl, image))
f.close()
l.close()
return np.array(images)