#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. Спасибо! вы правы !