Несоответствие в поведении слоя Keras Flatten () при использовании Theano Backend - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь понять поведение слоя Flatten() в Keras с Theano бэкэндом. У меня есть две разные версии Keras, установленные в двух разных Conda средах. То, как тензор 4D развернут с помощью Flatten(), отличается в этих двух версиях, и я совершенно не понимаю, какая из них верна.

Я написал следующие два фрагмента кода, чтобы показать проблему:

enter image description here

Приведенный выше код выравнивает входную матрицу вдоль оси channels сначала

Однако в другой версии результат будет другим:

enter image description here

Приведенный выше код сначала выравнивает входную матрицу вдоль оси columns.

Может кто-нибудь объяснить это? Спасибо!

1 Ответ

1 голос
/ 02 мая 2019

Оба верны.Разница заключается в настройке image_data_format.Это можно установить в keras.json или через бэкэнд API.

https://keras.io/backend/

>>> from keras import backend as K
>>> K.image_data_format()
'channels_first'

Когда формат равен 'channel_first', вывод будет

array([[ 0.,  9., 18., 27.,  1., 10., 19., 28.,  2., 11., 20., 29.,  3.,
        12., 21., 30.,  4., 13., 22., 31.,  5., 14., 23., 32.,  6., 15.,
        24., 33.,  7., 16., 25., 34.,  8., 17., 26., 35.]], dtype=float32)

Когда формат равен 'channel_last', вывод будет

array([[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11., 12.,
        13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24., 25.,
        26., 27., 28., 29., 30., 31., 32., 33., 34., 35.]], dtype=float32)
...