def get_connections(layers): connections = [] for layer_name, layer in layers.items(): for con in layer.outgoing: start = get_normalized_path(con.start_layer, 'outputs', con.output_name) end = get_normalized_path(con.end_layer, 'inputs', con.input_name) connections.append((start, end)) bwd_con = get_backward_connection(start, end, layer) if bwd_con: connections.append(bwd_con) # add connections to implicit 'parameters', and 'gradients'-layer for layer_name, layer in layers.items(): for param_name in layer.parameter_shapes: start = get_normalized_path(layer_name, 'parameters', param_name) end = 'parameters' connections.append((start, end)) start = get_normalized_path(layer_name, 'gradients', param_name) end = 'gradients' connections.append((start, end)) return sorted(connections)
def instantiate_layers_from_architecture(architecture): validate_architecture(architecture) layers = OrderedDict() connections = collect_all_connections(architecture) for layer_name in get_canonical_layer_order(architecture): layer = architecture[layer_name] LayerClass = get_layer_class_from_typename(layer['@type'] + 'LayerImpl') incoming = {c for c in connections if c.end_layer == layer_name} outgoing = {c for c in connections if c.start_layer == layer_name} input_names = {c.input_name for c in incoming} in_shapes = {} for input_name in input_names: incoming_out_shapes = [ layers[c.start_layer].get_shape( get_normalized_path('outputs', c.output_name)) for c in incoming if c.input_name == input_name] in_shapes[input_name] = combine_buffer_structures( incoming_out_shapes) layers[layer_name] = LayerClass(layer_name, in_shapes, incoming, outgoing, **get_kwargs(layer)) return layers
def get_gradient_order(layer_name, layer): return tuple([get_normalized_path(layer_name, 'gradients', o) for o in layer.parameter_shapes])
def get_gradient_order(layer_name, layer): return tuple([ get_normalized_path(layer_name, 'gradients', o) for o in layer.parameter_shapes ])
def get_parameter_order(layer_name, layer): return tuple([get_normalized_path(layer_name, "parameters", o) for o in layer.parameter_shapes])