Keras 2D плотный слой для вывода - PullRequest
0 голосов
/ 01 марта 2019

Я играю с моделью, которая должна взять шахматную доску 8x8 в качестве входных данных, закодированную как серое изображение 224x224, а затем вывести логистическую регрессию с горячим кодированием 64x13 = вероятности фигур на квадратах.

Теперь, после Сверточных слоев, я не совсем знаю, как перейти к получению слоя 2D-Dense в качестве результата / цели.

Я попытался добавить Dense (64,13) в качестве слояк моей последовательной модели, но я получаю ошибку «Плотный» может принимать только 1 позиционные аргументы («единицы»,) »

Можно ли даже тренироваться для двумерных целей?

EDIT1: Вот соответствующая часть моего кода, упрощенно:

# X.shape = (10000, 224, 224, 1)
# Y.shape = (10000, 64, 13)

model = Sequential([
    Conv2D(8, (3,3), activation='relu', input_shape=(224, 224, 1)),
    Conv2D(8, (3,3), activation='relu'),

    # some more repetitive Conv + Pooling Layers here

    Flatten(),

    Dense(64,13)
])

TypeError: Dense может принимать только 1 позиционный аргумент ('units',), но вы передали следующие позиционные аргументы:[64, 13]

РЕДАКТИРОВАТЬ 2: Как предположил Ананд В. Сингх, я изменил Dense (64, 13) на Dense (832), что прекрасно работает.Loss = mse.

Не лучше ли использовать "sparse_categorical_crossentropy" в качестве потери и кодирование 64x1 (вместо 64x13)?

1 Ответ

0 голосов
/ 01 марта 2019

В Dense вы передаете только ожидаемое количество слоев в качестве выходных данных, если вы хотите (64x13) в качестве выходных данных, установите размер слоя как Dense(832) (64x13 = 832), а затем измените форму позже.Вам также необходимо изменить форму Y, чтобы точно рассчитать потери, которые будут использоваться для обратного распространения.

# X.shape = (10000, 224, 224, 1)
# Y.shape = (10000, 64, 13)
Y = Y.reshape(10000, 64*13)
model = Sequential([
    Conv2D(8, (3,3), activation='relu', input_shape=(224, 224, 1)),
    Conv2D(8, (3,3), activation='relu'),
    # some more repetitive Conv + Pooling Layers here
    Flatten(),
    Dense(64*13)
])

Это должно выполнить работу, если она не публикуется там, где она терпит неудачу, и мы можемпродолжай дальше.

...