Мои данные довольно простые, введите массивы из m = 10 действительных чисел и выведите еще один массив из m = 10 чисел. Я пытаюсь отсортировать массивы с помощью нейронных сетей, я посылаю случайные числа и ожидаю, что NN выведет argsort (x), то есть массив целых чисел с позициями упорядоченного массива.
( N, 10) вход
array([0.2843506 , 0.89343795, 0.37331381, 0.67697506, 0.85043472,
0.77386477, 0.08902575, 0.94891316, 0.83865261, 0.93507237])
---> (N, 10) выход
array([6, 0, 2, 3, 5, 8, 4, 1, 9, 7])
Я знаю, что стандартная практика скажет сделать кодирование в горячем режиме, но я знаю, что вы можете пропустите его с потерей sparse_categorical_entropy.
Вот моя модель:
def model_build():
in_x = Input(shape=(m,))
x = Dense(m,activation='relu')(in_x)
x = Dense(m,activation='relu')(x)
x = Dense(m,activation='relu')(x)
x=Dense(m, activation='softmax')(x)
Сборка просто отлично:
Model: "model_110"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_111 (InputLayer) (None, 10) 0
_________________________________________________________________
dense_424 (Dense) (None, 10) 110
_________________________________________________________________
dense_425 (Dense) (None, 10) 110
_________________________________________________________________
dense_426 (Dense) (None, 10) 110
_________________________________________________________________
dense_427 (Dense) (None, 10) 110
=================================================================
Total params: 440
Trainable params: 440
Non-trainable params: 0
_________________________________________________________________
/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:9: UserWarning: Update your `Model` call to the Keras 2 API: `Model(inputs=Tensor("in..., outputs=Tensor("de...)`
if __name__ == '__main__':
model = Model(inputs=in_x, output=x)
return model
Также компилируется без проблем
opt = Adam()
model.compile(optimizer=opt,
loss='sparse_categorical_crossentropy',
metrics=['sparse_categorical_accuracy'])
Но не подходит:
H=model.fit(X_train,y_train, validation_data=(X_val,y_val),epochs=100)
Это дает мне ошибку формы:
ValueError: Error when checking target: expected dense_427 to have shape (1,) but got array with shape (10,)
Вот полная ошибка:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-520-8559bb070d1e> in <module>()
1 H=model.fit(X_train,y_train, validation_data=(X_val,y_val),
2 #callbacks=callbacks_list,
----> 3 epochs=100)
2 frames
/usr/local/lib/python3.6/dist-packages/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
1152 sample_weight=sample_weight,
1153 class_weight=class_weight,
-> 1154 batch_size=batch_size)
1155
1156 # Prepare validation data.
/usr/local/lib/python3.6/dist-packages/keras/engine/training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_array_lengths, batch_size)
619 feed_output_shapes,
620 check_batch_axis=False, # Don't enforce the batch size.
--> 621 exception_prefix='target')
622
623 # Generate sample-wise weight values given the `sample_weight` and
/usr/local/lib/python3.6/dist-packages/keras/engine/training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
143 ': expected ' + names[i] + ' to have shape ' +
144 str(shape) + ' but got array with shape ' +
--> 145 str(data_shape))
146 return data
147
ValueError: Error when checking target: expected dense_427 to have shape (1,) but got array with shape (10,)