Ich benutze Keras und für einige Modifikationen eine Layer-Ausgabe verwenden. Vor, die Ausgabe mit (ein Tensor Variable) Ich bin es Umwandlung Array zu numpy und damit eval() aufrufen Sie darauf wie folgt:Fehler beim Aufrufen von eval() auf Tensor-Variable in Keras
def convert_output(orig_output):
conv_output = invoke_modifications(orig_output.eval(), 8)
Der Code schlägt mit folgenden Fehler:
File "<ipython-input-11-df86946997d5>", line 1, in <module>
orig_output.eval()
File "C:\ENV\p34\lib\site-packages\theano-0.9.0.dev4-py3.4.egg\theano\gof\graph.py", line 516, in eval
self._fn_cache[inputs] = theano.function(inputs, self)
File "C:\ENV\p34\lib\site-packages\theano-0.9.0.dev4-py3.4.egg\theano\compile\function.py", line 326, in function
output_keys=output_keys)
File "C:\ENV\p34\lib\site-packages\theano-0.9.0.dev4-py3.4.egg\theano\compile\pfunc.py", line 486, in pfunc
output_keys=output_keys)
File "C:\ENV\p34\lib\site-packages\theano-0.9.0.dev4-py3.4.egg\theano\compile\function_module.py", line 1783, in orig_function
output_keys=output_keys).create(
File "C:\ENV\p34\lib\site-packages\theano-0.9.0.dev4-py3.4.egg\theano\compile\function_module.py", line 1437, in __init__
accept_inplace)
File "C:\ENV\p34\lib\site-packages\theano-0.9.0.dev4-py3.4.egg\theano\compile\function_module.py", line 176, in std_fgraph
update_mapping=update_mapping)
File "C:\ENV\p34\lib\site-packages\theano-0.9.0.dev4-py3.4.egg\theano\gof\fg.py", line 180, in __init__
self.__import_r__(output, reason="init")
File "C:\ENV\p34\lib\site-packages\theano-0.9.0.dev4-py3.4.egg\theano\gof\fg.py", line 351, in __import_r__
self.__import__(variable.owner, reason=reason)
File "C:\ENV\p34\lib\site-packages\theano-0.9.0.dev4-py3.4.egg\theano\gof\fg.py", line 396, in __import__
variable=r)
theano.gof.fg.MissingInputError: An input of the graph, used to compute InplaceDimShuffle{x,x,x,x}(keras_learning_phase), was not provided and not given a value.Use the Theano flag exception_verbosity='high',for more information on this error.
Backtrace when the variable is created:
File "C:\Users\kak7lr\AppData\Roaming\JetBrains\PyCharm Community Edition 2016.3.2\helpers\pydev\_pydev_bundle\pydev_monkey_qt.py", line 71, in patched_import
return original_import(name, *args, **kwargs)
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1129, in _exec
File "<frozen importlib._bootstrap>", line 1471, in exec_module
File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
File "C:\ENV\p34\lib\site-packages\keras\backend\theano_backend.py", line 23, in <module>
_LEARNING_PHASE = T.scalar(dtype='uint8', name='keras_learning_phase') # 0 = test, 1 = train
Ich möchte eine Konvertierungsfunktion für die Ausgabe der vorherigen Ebene aufrufen. Die Konvertierungsfunktion nimmt die Eingabe als eine Tensorvariable und führt die Berechnung durch. Allerdings möchte ich auch die Daten visualisieren und ich muss bit_length auf jedem Element davon berechnen.
Für zB wenn Schicht A einen Ausgang Y1 gibt. Diese Ausgabe wird von der Lambda-Schicht L1 verwendet und ruft die Konvertierungsmethode auf. Beispielcode:
Y1 = layer A output
Lambda(lambda x: conversion_method(x))(Y1)
def conversion_method(input_tensor):
# do the conversion and also calc bit length
calc_integer_bits(input_tensor)
def calc_integer_bits(X):
noib_list = list()
for pos, each in enumerate(X):
in_range = int(round(abs(each .max() - each .min())))
bit_length = in_range.bit_length()
noib_list.append(bit_length)
return noib_list
Ich verwendete ähnliches Schema für die Konvertierung der Schichtgewichte mit model.get_weights(). Die get_weights() -Methode gibt eine numpy Array-Liste zurück und könnte somit leicht auf jedes Element iterieren und die Bitlänge berechnen. Aber während der Konvertierung der Ausgabe ist ein Problem, da die Ausgabe eine Tensor-Variable ist und wenn ich eval() darauf aufrufen, gibt den Fehler, den ich im vorherigen Post erwähnt. Ich hoffe, ich konnte meine Absichten klären.
Danke für die Antwort. Ich bin mir nicht ganz sicher, wie ich die Bitlänge der Elemente innerhalb dieser Tensorvariablen erhalten kann. Können Sie, wenn möglich, ein Beispiel vorschlagen? – blackbug
@blackbugDann sollten Sie die Methode calc_bit_lenth bereitstellen, damit wir eine symbolische Darstellung davon finden können. –
Ich habe die Frage mit der genannten Methode aktualisiert. Es ist eigentlich ganz einfach. – blackbug