feat(api): build a single token for multi-layer Textual Inversions (#212)
This commit is contained in:
parent
af62c1c3b6
commit
5dd14c19ce
|
@ -65,14 +65,24 @@ def blend_textual_inversions(
|
||||||
num_tokens = trained_embeds.shape[0]
|
num_tokens = trained_embeds.shape[0]
|
||||||
logger.debug("generating %s layer tokens for %s", num_tokens, name)
|
logger.debug("generating %s layer tokens for %s", num_tokens, name)
|
||||||
|
|
||||||
|
sum_layer = np.zeros(trained_embeds[0, :].shape)
|
||||||
|
|
||||||
for i in range(num_tokens):
|
for i in range(num_tokens):
|
||||||
token = f"{base_token or name}-{i}"
|
token = f"{base_token or name}-{i}"
|
||||||
layer = trained_embeds[i, :].cpu().numpy().astype(dtype)
|
layer = trained_embeds[i, :].cpu().numpy().astype(dtype)
|
||||||
layer *= weight
|
layer *= weight
|
||||||
|
sum_layer += layer
|
||||||
if token in embeds:
|
if token in embeds:
|
||||||
embeds[token] += layer
|
embeds[token] += layer
|
||||||
else:
|
else:
|
||||||
embeds[token] = layer
|
embeds[token] = layer
|
||||||
|
|
||||||
|
# add sum layer to embeds
|
||||||
|
sum_token = f"{base_token or name}-all"
|
||||||
|
if sum_token in embeds:
|
||||||
|
embeds[sum_token] += sum_layer
|
||||||
|
else:
|
||||||
|
embeds[sum_token] = sum_layer
|
||||||
else:
|
else:
|
||||||
raise ValueError(f"unknown Textual Inversion format: {format}")
|
raise ValueError(f"unknown Textual Inversion format: {format}")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue