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 varView on GitHub (pinned to a0d164d6a8)
Solutions
- Print the network's net.layers dict keys and feed an exact existing name
- Verify the referenced layer was created on the same Network instance before feed is called
- 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
- Log/inspect net.layers keys before feeding by name
- Avoid relying on auto-generated names; pass explicit name= kwargs
- Pass tensor objects instead of strings when the reference is in scope
- Keep layer names and feed strings in one shared constant list
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
- Unknown layer name fed: %s
- No input variables found for layer %s.
- No input variables found for layer %s.
AI-assisted analysis of lllyasviel/style2paints@a0d164d6a8 (2026-09-02).
Data as JSON: /api/errors/e5fa490f00bee791.
Report an issue: GitHub.