trixi.util¶
-
class
trixi.util.util.
CustomJSONDecoder
(*, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)[source]¶ Bases:
json.decoder.JSONDecoder
-
class
trixi.util.util.
CustomJSONEncoder
(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)[source]¶ Bases:
json.encoder.JSONEncoder
-
class
trixi.util.util.
LogDict
(file_name, base_dir=None, to_console=False, mode='a')[source]¶ Bases:
dict
-
class
trixi.util.util.
ModuleMultiTypeDecoder
(*, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)[source]¶
-
class
trixi.util.util.
ModuleMultiTypeEncoder
(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)[source]¶
-
class
trixi.util.util.
MultiTypeDecoder
(*, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)[source]¶
-
class
trixi.util.util.
MultiTypeEncoder
(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)[source]¶
-
class
trixi.util.util.
ResultElement
(data=None, label=None, epoch=None, counter=None)[source]¶ Bases:
dict
-
class
trixi.util.util.
ResultLogDict
(file_name, base_dir=None, running_mean_length=10, **kwargs)[source]¶ Bases:
trixi.util.util.LogDict
-
class
trixi.util.util.
Singleton
(decorated)[source]¶ Bases:
object
A non-thread-safe helper class to ease implementing singletons. This should be used as a decorator – not a metaclass – to the class that should be a singleton.
The decorated class can define one __init__ function that takes only the self argument. Also, the decorated class cannot be inherited from. Other than that, there are no restrictions that apply to the decorated class.
To get the singleton instance, use the Instance method. Trying to use __call__ will result in a TypeError being raised.
-
class
trixi.util.util.
StringMultiTypeDecoder
(*, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)[source]¶
-
trixi.util.util.
create_folder
(path)[source]¶ Creates a folder if not already exists :param : param path: The folder to be created
- Returns
return: True if folder was newly created, false if folder already exists
-
trixi.util.util.
figure_to_image
(figures, close=True)[source]¶ Render matplotlib figure to numpy format.
Note that this requires the
matplotlib
package. (https://tensorboardx.readthedocs.io/en/latest/_modules/tensorboardX/utils.html#figure_to_image)Parameters: - figure (matplotlib.pyplot.figure) – figure or a list of figures
- close (bool) – Flag to automatically close the figure
Returns: image in [CHW] order
Return type: numpy.array
-
trixi.util.util.
get_image_as_buffered_file
(image_array)[source]¶ Returns a images as file pointer in a buffer
Parameters: image_array – (C,W,H) To be returned as a file pointer Returns: Buffer file-pointer object containing the image file
-
trixi.util.util.
get_tensor_embedding
(tensor, method='tsne', n_dims=2, n_neigh=30, **meth_args)[source]¶ Return a embedding of a tensor (in a lower dimensional space, e.g. t-SNE)
Parameters: - tensor – Tensor to be embedded
- method – Method used for embedding, options are: tsne, standard, ltsa, hessian, modified, isomap, mds,
- umap (spectral,) –
- n_dims – dimensions to embed the data into
- n_neigh – Neighbour parameter to kind of determin the embedding (see t-SNE for more information)
- **meth_args – Further arguments which can be passed to the embedding method
Returns: The embedded tensor
-
trixi.util.util.
name_and_iter_to_filename
(name, n_iter, ending, iter_format='{:05d}', prefix=False)[source]¶
-
trixi.util.util.
np_make_grid
(np_array, nrow=8, padding=2, normalize=False, range=None, scale_each=False, pad_value=0, to_int=False, standardize=False)[source]¶ Make a grid of images.
Parameters: - np_array (numpy array) – 4D mini-batch Tensor of shape (B x C x H x W) or a list of images all of the same size.
- nrow (int, optional) – Number of images displayed in each row of the grid. The Final grid size is (B / nrow, nrow). Default is 8.
- padding (int, optional) – amount of padding. Default is 2.
- normalize (bool, optional) – If True, shift the image to the range (0, 1), by subtracting the minimum and dividing by the maximum pixel value.
- range (tuple, optional) – tuple (min, max) where min and max are numbers, then these numbers are used to normalize the image. By default, min and max are computed from the tensor.
- scale_each (bool, optional) – If True, scale each image in the batch of images separately rather than the (min, max) over all images.
- pad_value (float, optional) – Value for the padded pixels.
- to_int (bool) – Transforms the np array to a unit8 array with min 0 and max 255
Example
See this notebook here
Config¶
-
class
trixi.util.config.
Config
(file_=None, config=None, update_from_argv=False, deep=False, **kwargs)[source]¶ Bases:
dict
Config is the main object used to store configurations. As a rule of thumb, anything you might want to change in your experiment should go into the Config. It’s basically a
dict
, but vastly more powerful. Key features are- Access keys as attributes
Config[“a”][“b”][“c”] is the same as Config.a.b.c. Can also be used for setting if the second to last key exists. Only works for keys that conform with Python syntax (Config.myattr-1 is not allowed).
- Advanced de-/serialization
Using specialized JSON encoders and decoders, almost anything can be serialized and deserialized. This includes types, functions (except lambdas) and modules. For example, you could have something like:
c = Config(model=MyModel) c.dump("somewhere")
and end up with a JSON file that looks like this:
{ "model": "__type__(your.model.module.MyModel)" }
and vice versa. We use double underscores and parentheses for serialization, so it’s probably a good idea to not use this pattern for other stuff!
- Automatic CLI exposure
If desired, the Config will create an ArgumentParser that contains all keys in the Config as arguments in the form “- - key”, so you can run your experiment from the command line and manually overwrite certain values. Deeper levels are also accessible via dot notation “- - key_with_dict_value.inner_key”.
- Comparison
Compare any number of Configs and get a new Config containing only the values that differ among input Configs.
Parameters: - file (str) – Load Config from this file.
- config (Config) – Update with values from this Config (can be combined with
file_
). Will by default only make shallow copies, seedeep
. - update_from_argv (bool) – Update values from argv. Will automatically expose keys to the CLI as ‘- - key’.
- deep (bool) – Make deep copies if
config
is given.
-
contains
(dict_like)[source]¶ Check whether all items in a dictionary-like object match the ones in this Config.
Parameters: dict_like (dict or derivative thereof) – Returns True if this is contained in this Config. Returns: True if dict_like is contained in self, otherwise False. Return type: bool
-
deepupdate
(dict_like, ignore=None, allow_dict_overwrite=True)[source]¶ Identical to
update()
with deep=True.Parameters: - dict_like (dict or derivative thereof) – Update source.
- ignore (iterable) – Iterable of keys to ignore in update.
- allow_dict_overwrite (bool) – Allow overwriting with dict. Regular dicts only update on the highest level while we recurse and merge Configs. This flag decides whether it is possible to overwrite a ‘regular’ value with a dict/Config at lower levels. See examples for an illustration of the difference
-
difference_config
(*other_configs)[source]¶ Get the difference of this and any number of other configs. See
difference_config_static()
for more information.Parameters: *other_configs (Config) – Compare these configs and self. Returns: Difference of self and the other configs. Return type: Config
-
static
difference_config_static
(*configs, only_set=False, encode=True)[source]¶ Make a Config of all elements that differ between N configs.
The resulting Config looks like this:
{ key: (config1[key], config2[key], ...) }
If the key is missing, None will be inserted. The inputs will not be modified.
Parameters: Returns: Possibly empty Config
Return type:
-
dump
(file_, indent=4, separators=(', ', ': '), **kwargs)[source]¶ Write config to file using
json.dump()
.Parameters:
-
dumps
(indent=4, separators=(', ', ': '), **kwargs)[source]¶ Get string representation using
json.dumps()
.Parameters: - indent (int) – Formatting option.
- separators (iterable) – Formatting option.
- **kwargs – Will be passed to
json.dumps()
.
-
flat
(keep_lists=True, max_split_size=10, flatten_int=False)[source]¶ Returns a flattened version of the Config as dict.
Nested Configs and lists will be replaced by concatenated keys like so:
{ "a": 1, "b": [2, 3], "c": { "x": 4, "y": { "z": 5 } }, "d": (6, 7) }
Becomes:
{ "a": 1, "b": [2, 3], # if keep_lists is True "b.0": 2, "b.1": 3, "c.x": 4, "c.y.z": 5, "d": (6, 7) }
We return a dict because dots are disallowed within Config keys.
Parameters: - keep_lists – Keeps list along with unpacked values
- max_split_size – List longer than this will not be unpacked
- flatten_int – Integer keys will be treated as strings
Returns: A flattened version of self
Return type:
-
static
init_objects
(config)[source]¶ Returns a new Config with types converted to instances.
Any value that is a Config and contains a type key will be converted to an instance of that type:
{ "stuff": "also_stuff", "convert_me": { type: { "param": 1, "other_param": 2 }, "something_else": "hopefully_useless" } }
becomes:
{ "stuff": "also_stuff", "convert_me": type(param=1, other_param=2) }
Note that additional entries can be lost as shown above.
Parameters: config (Config) – New Config will be built from this one Returns: A new config with instances made from type entries. Return type: Config
-
load
(file_, raise_=True, decoder_cls_=<class 'trixi.util.util.ModuleMultiTypeDecoder'>, **kwargs)[source]¶ Load config from file using
json.load()
.Parameters:
-
loads
(json_str, decoder_cls_=<class 'trixi.util.util.ModuleMultiTypeDecoder'>, **kwargs)[source]¶ Load config from JSON string using
json.loads()
.Parameters:
-
set_from_string
(str_, stringify_value=False)[source]¶ Set a value from a single string, separated with “=”. Uses :meth:´set_with_decode´.
Parameters: str (str) – String that looks like “key=value”.
-
set_with_decode
(key, value, stringify_value=False)[source]¶ Set single value, using
ModuleMultiTypeDecoder
to interpret key and value strings by creating a temporary JSON string.Parameters: Examples
Example for when you need to set stringify_value=True:
config.set_with_decode("key", "__type__(trixi.util.config.Config)", stringify_value=True)
Example for when you need to set stringify_value=False:
config.set_with_decode("key", "[1, 2, 3]")
-
to_cmd_args_str
()[source]¶ Create a string representing what one would need to pass to the command line. Does not yet use JSON encoding!
Returns: Command line string Return type: str
-
update
(dict_like, deep=False, ignore=None, allow_dict_overwrite=True)[source]¶ Update entries in the Config.
Parameters: - dict_like (dict or derivative thereof) – Update source.
- deep (bool) – Make deep copies of all references in the source.
- ignore (iterable) – Iterable of keys to ignore in update.
- allow_dict_overwrite (bool) – Allow overwriting with dict. Regular dicts only update on the highest level while we recurse and merge Configs. This flag decides whether it is possible to overwrite a ‘regular’ value with a dict/Config at lower levels. See examples for an illustration of the difference
Examples
The following illustrates the update behaviour if :obj:allow_dict_overwrite is active. If it isn’t, an AttributeError would be raised, originating from trying to update “string”:
config1 = Config(config={ "lvl0": { "lvl1": "string", "something": "else" } }) config2 = Config(config={ "lvl0": { "lvl1": { "lvl2": "string" } } }) config1.update(config2, allow_dict_overwrite=True) >>>config1 { "lvl0": { "lvl1": { "lvl2": "string" }, "something": "else" } }
-
trixi.util.config.
monkey_patch_fn_args_as_config
(f)[source]¶ Decorator: Monkey patches, aka addes a variable ‘fn_args_as_config’ to globals, so that it can be accessed by the decorated function. Adds all function parameters to a dict ‘fn_args_as_config’, which can be accessed by the method. Be careful using it!
-
trixi.util.config.
update_from_sys_argv
(config, warn=False)[source]¶ Updates Config with the arguments passed as args when running the program. Keys will be converted to command line options, then matching options in sys.argv will be used to update the Config.
Parameters: - config (Config) – Update this Config.
- warn (bool) – Raise warnings if there are unknown options. Turn this on
if you don’t use any
argparse.ArgumentParser
after to check for possible errors.
ExtraVisdom¶
-
class
trixi.util.extravisdom.
ExtraVisdom
(*args, **kwargs)[source]¶ Bases:
sphinx.ext.autodoc.importer._MockObject
-
histogram_3d
(X, win=None, env=None, opts=None)[source]¶ Given an array it plots the histrograms of the entries.
Parameters: - X – An array of at least 2 dimensions, where the first dimensions gives the number of histograms.
- win – Window name.
- env – Env name.
- opts – dict with options, especially opts[‘numbins’] (number of histogram bins) and opts[‘mutiplier’]
( factor to stretch / queeze the values on the x axis) should be considered.
Returns: The send result.
-
GridSearch¶
pytorchutils¶
-
trixi.util.pytorchutils.
get_guided_image_gradient
(model: <sphinx.ext.autodoc.importer._MockObject object at 0x7f8886120450>, inpt, err_fn, abs=False)[source]¶
-
trixi.util.pytorchutils.
get_input_gradient
(model, inpt, err_fn, grad_type='vanilla', n_runs=20, eps=0.1, abs=False, results_fn=<function <lambda>>)[source]¶ Given a model creates calculates the error and backpropagates it to the image and saves it (saliency map).
Parameters: - model – The model to be evaluated
- inpt – Input to the model
- err_fn – The error function the evaluate the output of the model on
- grad_type – Gradient calculation method, currently supports (vanilla, vanilla-smooth, guided,
- guided-smooth) (the guided backprob can lead to segfaults -.-) –
- n_runs – Number of runs for the smooth variants
- eps – noise scaling to be applied on the input image (noise is drawn from N(0,1))
- abs (bool) – Flag, if the gradient should be a absolute value
- results_fn – function which is called with the results/ return values. Expected f(grads)