Слои Tensorflow keras.Умножить() Ошибка типа: объект «Нетип» не может быть подписан

#python #tensorflow #keras

Вопрос:

Я начинаю с Кераса. Я пытаюсь преобразовать следующий скрипт R в Python

 1 library ( keras )
2 # we fit j =0 with feature matrix dat .X , claims dat$C1 and volumes dat$C0
3 dat .Y <- as . matrix ( dat$C1 / sqrt ( dat$C0 )) # observed responses
4 dat .W <- as . matrix ( sqrt ( dat$C0 )) # volumes used as offsets
5 q <- 20 # number of hidden neurons
6 # definition of neural network
7 features <- layer_input ( shape = c( ncol ( dat .X )))
8 net <- features % >%
9 layer_dense ( units = q , activation = ’tanh ’) % >%
10 layer_dense ( units = 1, activation = k_exp )
11 volumes <- layer_input ( shape =c (1))
12 offset <- volumes % >%
13 layer_dense ( units = 1, activation = ’ linear ’ , use_bias = FALSE , trainable = FALSE ,weights = list ( array (1 , dim =c (1 ,1))))
14 weights = list ( array (1 , dim =c (1 ,1))))
15 merged <- list ( net , offset ) % >%
16 layer_multiply ()
 

Ниже моего скрипта python:

 input_shape = SelectedMatrix_Tr.shape[1]
net = Sequential ([
    Dense(20, activation="tanh", input_shape=(input_shape,), name="hidden_layer_1"),               
    Dense(1, activation=tf.keras.activations.exponential, name="output_layer") 
])

offset =  Sequential([
    Dense(
    units=1,
    activation = 'linear', 
    input_shape=(None,1),
    #input_dim=1,
    use_bias = True, 
    trainable = False, 
   
    kernel_initializer=tf.constant_initializer(1.)
    
    )
        ])

multiplied = tf.keras.layers.Multiply()([net,offset])
 

Ошибка возникает в последней строке умножения. Под сообщением об ошибке:

Трассировка ошибок типа (последний последний вызов) в — — — — > 1 умножено = tf.keras.слои.Умножение()([модель,смещение])

~AppDataRoamingPythonPython37site-packagestensorflowpythonkerasenginebase_layer.py в вызове(self, *args, **kwargs) 1021 с ops.name_scope_v2(name_scope): 1022, если не самостоятельно.построено: -> 1023 самостоятельно._maybe_build(входы) 1024 1025, если самостоятельно._автокаст:

~AppDataRoamingPythonPython37site-packagestensorflowpythonkerasenginebase_layer.py в _maybe_build(самовывоз, входы) 2623 операции#. 2624
с tf_utils.maybe_init_scope(самовыдвижение): -> 2625 самостоятельно.построить(input_shapes) # pylint:отключить=не предусмотрена 2626 # мы должны также убедиться, что слой помечается как построили, и строят 2627 # форма хранится пользователей с определенными построить функции могут не звонить

~AppDataРоумингPythonPython37пакеты сайтовtensorflowpythonkerasutilstf_utils.py в оболочке(например, input_shape) 268, если input_shape не равен None: 269 input_shape = преобразованные формы(input_shape, to_tuples=True) —> 270 output_shape = fn(например, input_shape) 271 # Возвращаемые формы из > fn как тензорные формы. 272, если output_shape не равен None:

~AppDataRoamingPythonPython37site-packagestensorflowpythonkeraslayersmerge.py в сборке(self, input_shape) 86 сборка def(self, input_shape): 87 # Используется исключительно для проверки формы. —> 88 если не isinstance(input_shape[0], кортеж): 89 ошибка повышения значения («Слой слияния должен быть вызван в списке входных данных».) 90 если len(input_shape) >:

Ошибка типа: объект «Нетип» не может быть подписан

Есть какие-нибудь предложения ?

Спасибо!

Комментарии:

1. Сценарий R как бы использует функциональный API, в то время как ваш код python использует последовательный API, вам необходимо реализовать это с помощью функционального API.

2. Спасибо! вы правы !