#python #tensorflow #neural-network
#python #тензорный поток #нейронная сеть
Вопрос:
Я пытаюсь вычислить матрицу мешанины выходных данных нейронной сети относительно входных данных, используя градиентные ленты и 2 функции batch_jacobian. Первая функция возвращает якобиан, как и ожидалось, вторая возвращает довольно бессмысленную ошибку. Выбираются координаты [:,0] в g, поскольку якобиан вычисляется только по одной переменной, следовательно, вторая ось имеет длину только 1. Код не выполняется после точки, в которой вычисляется мешанина.
def dynamics(self, x): # compute guess of dynamics of the system, using current lagrangian model
with tf.GradientTape() as tape2: # observing the first order derivatives
tape2.watch(x)
with tf.GradientTape(persistent = True) as tape:
tape.watch(x)
lagrangian = self.lagrangian_net(x)
print(lagrangian)
g = tape.batch_jacobian(lagrangian, x, unconnected_gradients='zero')[:, 0]
print(g)
hessian = tape2.batch_jacobian(g, x, unconnected_gradients='zero')
print(hessian)
U = g[:, 0, :] - tf.einsum("dij,dj->di", hessian[:, 1, :, 0, :], x[:, 1, :]) # U[d,i]
P = hessian[:, 1, :, 1, :]
P = tf.map_fn(tf.linalg.inv, P) # P[d, i, k]
A = tf.einsum("di,dik->dk", U, P)
return A # return accelerations for the batch
Ошибка:
Трассировка (последний последний вызов): Файл «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythoneagerbackprop.py» , строка 1183, в batch_jacobian parallel_iterations=parallel_iterations) Файл «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythonopsparallel_forcontrol_flow_ops.py» , строка 164, в файле pfor return f() «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythoneagerfunction.py» , строка 1323, в вызове graph_function, аргументы, kwargs = self.Файл _maybe_define_function(args, kwargs) «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythoneagerfunction.py» , строка 1652, в файле _maybe_define_function graph_function = self._create_graph_function(аргументы, kwargs) «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythoneagerfunction.py» , строка 1545, в _create_graph_function capture_by_value=self._capture_by_value), файл «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythonframeworkfunc_graph.py» , строка 715, в func_graph_from_py_func func_outputs = python_func(*func_args,** Файл func_kwargs) «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythonframeworkfunc_graph.py» , строка 705, в оболочке, вызывающей e.ag_error_metadata.to_exception(тип(e)) Ошибка значения: в преобразованном коде: относительно C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythonopsparallel_for:
control_flow_ops.py:161 f *
return _pfor_impl(loop_fn, iters, parallel_iterations=parallel_iterations)
control_flow_ops.py:214 _pfor_impl
outputs.append(converter.convert(loop_fn_output))
pfor.py:1175 convert
output = self._convert_helper(y)
pfor.py:1343 _convert_helper
"which may run slower" % (y_op.type, y_op, converted_inputs))
ValueError: No converter defined for PartitionedCall
name: "loop_body/PartitionedCall"
op: "PartitionedCall"
input: "loop_body/Reshape_4"
input: "loop_body/PartitionedCall/args_1"
input: "loop_body/PartitionedCall/args_2"
input: "loop_body/PartitionedCall/args_3"
input: "loop_body/PartitionedCall/args_4"
input: "loop_body/PartitionedCall/args_5"
attr {
key: "Tin"
value {
list {
type: DT_DOUBLE
type: DT_DOUBLE
type: DT_DOUBLE
type: DT_DOUBLE
type: DT_DOUBLE
type: DT_INT32
}
}
}
attr {
key: "Tout"
value {
list {
type: DT_DOUBLE
type: DT_DOUBLE
}
}
}
attr {
key: "_gradient_op_type"
value {
s: "PartitionedCall-385"
}
}
attr {
key: "config"
value {
s: ""
}
}
attr {
key: "config_proto"
value {
s: "n07n03CPU2001n07n03GPU2000202J00801"
}
}
attr {
key: "executor_type"
value {
s: ""
}
}
attr {
key: "f"
value {
func {
name: "__inference___backward_f_232_270"
}
}
}
inputs: [WrappedTensor(t=<tf.Tensor 'loop_body/Reshape_4/pfor/Reshape:0' shape=(4, 1, 3, 2, 2) dtype=float64>, is_stacked=True, is_sparse_stacked=False), WrappedTensor(t=<tf.Tensor 'loop_body/PartitionedCall/args_1:0' shape=(4, 1) dtype=float64>, is_stacked=False, is_sparse_stacked=False), WrappedTensor(t=<tf.Tensor 'loop_body/PartitionedCall/args_2:0' shape=(3, 1) dtype=float64>, is_stacked=False, is_sparse_stacked=False), WrappedTensor(t=<tf.Tensor 'loop_body/PartitionedCall/args_3:0' shape=(1, 3, 1) dtype=float64>, is_stacked=False, is_sparse_stacked=False), WrappedTensor(t=<tf.Tensor 'loop_body/PartitionedCall/args_4:0' shape=(1, 3, 1) dtype=float64>, is_stacked=False, is_sparse_stacked=False), WrappedTensor(t=<tf.Tensor 'loop_body/PartitionedCall/args_5:0' shape=(3,) dtype=int32>, is_stacked=False, is_sparse_stacked=False)].
Either add a converter or set --op_conversion_fallback_to_while_loop=True, which may run slower
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File «C:/Users/Maks/Desktop/neural/lagrangian neural network.py», line 129, in
N.train(2)
File «C:/Users/Maks/Desktop/neural/lagrangian neural network.py», line 110, in train
self.train_step(x, true_y)
File «C:/Users/Maks/Desktop/neural/lagrangian neural network.py», line 98, in train_step
acc = self.dynamics(x)
File «C:/Users/Maks/Desktop/neural/lagrangian neural network.py», line 83, in dynamics
hessian = tape2.batch_jacobian(g, x, unconnected_gradients=’zero’)
File «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythoneagerbackprop.py», line 1191, in batch_jacobian
sys.exc_info()[2])
File «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagessix.py», line 702, in reraise
raise value.with_traceback(tb)
File «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythoneagerbackprop.py», line 1183, in batch_jacobian
parallel_iterations=parallel_iterations)
File «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythonopsparallel_forcontrol_flow_ops.py», line 164, in pfor
return f()
File «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythoneagerfunction.py», line 1323, in call
graph_function, args, kwargs = self._maybe_define_function(args, kwargs)
File «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythoneagerfunction.py», line 1652, in _maybe_define_function
graph_function = self._create_graph_function(args, kwargs)
File «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythoneagerfunction.py», line 1545, in _create_graph_function
capture_by_value=self._capture_by_value),
File «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythonframeworkfunc_graph.py», line 715, in func_graph_from_py_func
func_outputs = python_func(*func_args, **func_kwargs)
File «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythonframeworkfunc_graph.py», line 705, in wrapper
raise e.ag_error_metadata.to_exception(type(e))
ValueError: in converted code:
relative to C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythonopsparallel_for:
control_flow_ops.py:161 f *
return _pfor_impl(loop_fn, iters, parallel_iterations=parallel_iterations)
control_flow_ops.py:214 _pfor_impl
outputs.append(converter.convert(loop_fn_output))
pfor.py:1175 convert
output = self._convert_helper(y)
pfor.py:1343 _convert_helper
"which may run slower" % (y_op.type, y_op, converted_inputs))
ValueError: No converter defined for PartitionedCall
name: "loop_body/PartitionedCall"
op: "PartitionedCall"
input: "loop_body/Reshape_4"
input: "loop_body/PartitionedCall/args_1"
input: "loop_body/PartitionedCall/args_2"
input: "loop_body/PartitionedCall/args_3"
input: "loop_body/PartitionedCall/args_4"
input: "loop_body/PartitionedCall/args_5"
attr {
key: "Tin"
value {
list {
type: DT_DOUBLE
type: DT_DOUBLE
type: DT_DOUBLE
type: DT_DOUBLE
type: DT_DOUBLE
type: DT_INT32
}
}
}
attr {
key: "Tout"
value {
list {
type: DT_DOUBLE
type: DT_DOUBLE
}
}
}
attr {
key: "_gradient_op_type"
value {
s: "PartitionedCall-385"
}
}
attr {
key: "config"
value {
s: ""
}
}
attr {
key: "config_proto"
value {
s: "n07n03CPU2001n07n03GPU2000202J00801"
}
}
attr {
key: "executor_type"
value {
s: ""
}
}
attr {
key: "f"
value {
func {
name: "__inference___backward_f_232_270"
}
}
}
inputs: [WrappedTensor(t=<tf.Tensor 'loop_body/Reshape_4/pfor/Reshape:0' shape=(4, 1, 3, 2, 2) dtype=float64>, is_stacked=True, is_sparse_stacked=False), WrappedTensor(t=<tf.Tensor 'loop_body/PartitionedCall/args_1:0' shape=(4, 1) dtype=float64>, is_stacked=False, is_sparse_stacked=False), WrappedTensor(t=<tf.Tensor 'loop_body/PartitionedCall/args_2:0' shape=(3, 1) dtype=float64>, is_stacked=False, is_sparse_stacked=False), WrappedTensor(t=<tf.Tensor 'loop_body/PartitionedCall/args_3:0' shape=(1, 3, 1) dtype=float64>, is_stacked=False, is_sparse_stacked=False), WrappedTensor(t=<tf.Tensor 'loop_body/PartitionedCall/args_4:0' shape=(1, 3, 1) dtype=float64>, is_stacked=False, is_sparse_stacked=False), WrappedTensor(t=<tf.Tensor 'loop_body/PartitionedCall/args_5:0' shape=(3,) dtype=int32>, is_stacked=False, is_sparse_stacked=False)].
Either add a converter or set --op_conversion_fallback_to_while_loop=True, which may run slower
При векторизации вычисления batch_jacobian возникло исключение. Векторизацию можно отключить, установив для experimental_use_pfor значение False .
Исключение игнорируется в:del в 0x0000026FE02C50D8>
Трассировка (последний последний вызов):
Файл «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythoneagerfunction.py» , строка 305, в del
Файл «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythoneagercontext.py «, строка 1663, в remove_function
Файл «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythoneagercontext.py «, строка 865, в remove_function
Ошибка типа: объект ‘NoneType’ не вызывается
Исключение игнорируется в:del в 0x0000026FE02C50D8>
Трассировка (последний последний вызов):
Файл «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythoneagerfunction.py» , строка 305, в del
Файл «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythoneagercontext.py «, строка 1663, в remove_function
Файл «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythoneagercontext.py «, строка 865, в remove_function
Ошибка типа: объект ‘NoneType’ не вызывается
Исключение игнорируется в:del в 0x0000026FE02C50D8>
Трассировка (последний последний вызов):
Файл «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythoneagerfunction.py» , строка 305, в del
Файл «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythoneagercontext.py «, строка 1663, в remove_function
Файл «C:UsersMaksAnaconda3envsmachine_learninglibsite-packagestensorflowpythoneagercontext.py «, строка 865, в remove_function
Ошибка типа: объект ‘NoneType’ не вызывается
Ответ №1:
Решается путем обновления до tensorflow 2.1