Функция Add () в tf.keras.Sequential () - PullRequest
0 голосов
/ 05 мая 2020

Можно ли включить функцию Add () в модель tf.keras.Sequential (), если она определена как:

from tensorflow import keras

model = keras.Sequential([
    keras.Input(shape(input_shape,)),
    keras.layers.Dense(32),
    keras.layers.Dense(8),
    # I want to add here
    keras.layers.Add()(some_var)
], name='my_model')

some_var - это тензор того же размера, что и сеть в этот момент. Таким образом, каждый элемент должен быть добавлен к соответствующему элементу в some_var.

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

Если непонятно keras.layers.Add()(some_var) - это всего лишь предположение, как я бы хотел, чтобы это работало. Это дает ошибку: ValueError: A merge layer should be called on a list of inputs..

Мой вопрос касается c стиля, в котором я определяю модель Sequential.

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Благодаря комментарию @today (а затем удаленному ответу ?!) я решил его с помощью функции tf.keras.layer.Lambda.

model = keras.Sequential([
    keras.Input(shape(input_shape,)),
    keras.layers.Dense(32),
    keras.layers.Dense(8),
    keras.layers.Lambda(lambda x : x + some_var)
], name='my_model')
0 голосов
/ 05 мая 2020

Одно из основных различий между Functional и Sequential API заключается в том, что Sequential работает с одним входом и одним выходом, а Functional API работает с одним входом и одним выходом или одним входом и несколькими -выход, или несколько входов и несколько выходов. Таким образом, используя Functional API, вы можете добавить два уровня множественных входов через `keras.layers.Add ().

Кроме того, этот keras.layers.Add() можно использовать для добавления двух входных тензоров, которые не являются действительно делаем. мы скорее можем использовать как d = tf.add (a, b). И c, и d равны

a = tf.constant(1.,dtype=tf.float32, shape=(1,3)).  
b = tf.constant(2.,dtype=tf.float32, shape=(1,3)). 
c = tf.keras.layers.Add()([a, b]). 

Следующий пример взят с веб-сайта keras. Вы можете увидеть, как это используется в Functional API

import keras

input1 = keras.layers.Input(shape=(16,))
x1 = keras.layers.Dense(8, activation='relu')(input1)
input2 = keras.layers.Input(shape=(32,))
x2 = keras.layers.Dense(8, activation='relu')(input2)
# equivalent to added = keras.layers.add([x1, x2])
added = keras.layers.Add()([x1, x2])

out = keras.layers.Dense(4)(added)
model = keras.models.Model(inputs=[input1, input2], outputs=out)
...