lllyasviel/style2paints · error · KeyError

Unknown layer name fed: %s

Error message

Unknown layer name fed: %s

What it means

Network.feed() accepts layer references either as actual tensor objects or as string names looked up in self.layers. When a string is given but the dict lookup raises KeyError, feed re-raises it with a clearer 'Unknown layer name fed' message. This means the named layer does not exist (yet) in the network being built.

Source

Thrown at V4/s2p_v4_server/smoother.py:57

        self.setup()

    def setup(self):
        (self.feed('data')
             .conv(name = 'smoothing'))

    def get_unique_name(self, prefix):
        ident = sum(t.startswith(prefix) for t, _ in self.layers.items()) + 1
        return '%s_%d' % (prefix, ident)

    def feed(self, *args):
        assert len(args) != 0
        self.terminals = []
        for fed_layer in args:
            if isinstance(fed_layer, str):
                try:
                    fed_layer = self.layers[fed_layer]
                except KeyError:
                    raise KeyError('Unknown layer name fed: %s' % fed_layer)
            self.terminals.append(fed_layer)
        return self

    def gauss_kernel(self, kernlen=21, nsig=3, channels=1):
        interval = (2*nsig+1.)/(kernlen)
        x = np.linspace(-nsig-interval/2., nsig+interval/2., kernlen+1)
        kern1d = np.diff(st.norm.cdf(x))
        kernel_raw = np.sqrt(np.outer(kern1d, kern1d))
        kernel = kernel_raw/kernel_raw.sum()
        out_filter = np.array(kernel, dtype = np.float32)
        out_filter = out_filter.reshape((int(kernlen), int(kernlen), 1, 1))
        out_filter = np.repeat(out_filter, channels, axis = 2)
        return out_filter

    def make_gauss_var(self, name, size, sigma, c_i):
        kernel = self.gauss_kernel(size, sigma, c_i)
        var = tf.Variable(tf.convert_to_tensor(kernel), name=name)
        return var

View on GitHub (pinned to a0d164d6a8)

Solutions

  1. Print the network's net.layers dict keys and feed an exact existing name
  2. Verify the referenced layer was created on the same Network instance before feed is called
  3. Pass the tensor/variable object directly instead of its name string

Example fix

# before
net.feed('conv_1_1')  # KeyError: actual name may be 'conv1'

# after
print(list(net.layers.keys()))
net.feed('conv1')  # exact key from net.layers
Defensive patterns

Strategy: validation

Validate before calling

def ensure_layer_exists(net, name):
    if name not in net.layers:
        raise KeyError(f'{name} not in layers: {list(net.layers.keys())}')

ensure_layer_exists(net, 'conv1')
net.feed('conv1')

Try / catch

try:
    net.feed('conv1')
except KeyError as e:
    print('Available:', list(net.layers.keys()))
    raise

Prevention

When it happens

Trigger: Calling feed('some_name') where 'some_name' was never registered — the layer was never created, was created with a different name, or belongs to a different Network instance. Raised from within layer_decorated when a layer call is given string arguments referring to unknown layers.

Common situations: Typo in the layer name; auto-generated unique names (get_unique_name appends suffixes) not matching hand-written names; referencing a layer built on a different Network instance; resuming/rewriting model code after layer names changed.

Related errors


AI-assisted analysis of lllyasviel/style2paints@a0d164d6a8 (2026-09-02). Data as JSON: /api/errors/e5fa490f00bee791. Report an issue: GitHub.