Может ли Керас не добавлять массив чисел, получая скаляр? - PullRequest
2 голосов
/ 10 апреля 2019

Этот вопрос относится к этому вопросу , но немного проще.

Я хочу, чтобы Керас мог взять массив чисел и суммировать их.Массив должен иметь произвольную длину, определяемую размерностью пакета.

Следующий простой пример не работает:

from keras.models import Model
from keras.layers import Input, Lambda
from keras import backend as K

inp = Input(shape = (1,))
out = Lambda(lambda x: K.sum(x))(inp)
m = Model(inp, out)

m.summary()
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_7 (InputLayer)         (None, 1)                 0         
_________________________________________________________________
lambda_2 (Lambda)            ()                        0         
=================================================================
Total params: 0
Trainable params: 0
Non-trainable params: 0
_________________________________________________________________

Выходная форма должна быть скалярной: (1).Нет размерности партии.m, как определено выше, не компилируется.

Желаемый результат будет m.predict(np.array([1,2,3])) с результатом 6.Или, может быть, массив или тензор, содержащий 6.

Может ли эта основная задача - применение в качестве функции к измерению пакета и возврат скаляра - быть выполнена в Keras?Если нет, то можно ли это сделать в чистом тензорном потоке?

РЕДАКТИРОВАТЬ: я только что узнал, что вы можете предсказать из этой модели, не компилируя:

m.predict(np.array([1,2]))

дает

array([3., 3.], dtype=float32)

Полагаю, теперь у меня вопрос, как я могу сжать это в скаляр и заставить его скомпилировать.

1 Ответ

1 голос
/ 10 апреля 2019

Используйте tf.reduce_sum() с axis=None.Это уменьшит по всем измерениям:

import tensorflow as tf
import numpy as np
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Lambda
from tensorflow.keras import backend as K

inp = Input(shape = (3,))
out = Lambda(lambda x: tf.reduce_sum(x, axis=None))(inp)
m = Model(inp, out)

m.predict(np.array([[1, 2, 4]])) # array([7.], dtype=float32)

m.summary()
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_2 (InputLayer)         (None, 3)                 0         
_________________________________________________________________
lambda_1 (Lambda)            ()                        0         
=================================================================
Total params: 0
Trainable params: 0
Non-trainable params: 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...