Объединенный ввод с постоянным вектором в кератах. как определить размер пакета

В продолжение этого вопроса:

Объединенный ввод с постоянным вектором в кератах

Я пытаюсь использовать предложенное решение:

constant=K.variable(np.ones((1,10, 5)))
constant = K.repeat_elements(constant,rep=batch_size,axis=0)

И получил следующую ошибку:

NameError: name 'batch_size' is not defined

Я не понимаю, как определить в модели keras batch_size [не явно], чтобы можно было объединить символический слой и постоянный слой, чтобы использовать их в качестве входного слоя.

1 ответ

Решение

Чтобы получить динамический размер партии:

batch_size = K.shape(your_tensor)[0]

Но K.repeat_elements() не принимает Tensor значения для rep, Однако вы можете получить тот же результат, используя K.tile():

from keras.models import *
from keras import backend as K
import numpy as np

a = Input(shape=(10, 5))
batch_size = K.shape(a)[0]
constant = K.variable(np.ones((1,10, 5)))
constant = K.tile(constant, (batch_size, 1, 1))
print(constant)
# Tensor("Tile:0", shape=(?, 10, 5), dtype=float32)
Другие вопросы по тегам