import tensorflow as tf import umap

class UmapLayer(tf.keras.layers.Layer): def init(self, n_components=2, **kwargs): super(UmapLayer, self).init(**kwargs) self.n_components = n_components

def build(self, input_shape):
    self.umap = umap.UMAP(n_components=self.n_components)
    super(UmapLayer, self).build(input_shape)

def call(self, inputs):
    x = self.umap.fit_transform(inputs)
    return x

def compute_output_shape(self, input_shape):
    return (input_shape[0], self.n_components)

example usage

input_data = tf.keras.layers.Input(shape=(100,)) umap_layer = UmapLayer(n_components=2) output_data = umap_layer(input_data) model = tf.keras.models.Model(inputs=input_data, outputs=output_data) model.compile(optimizer='adam', loss='mse')

example data

import numpy as np X = np.random.rand(1000, 100)

fit model

model.fit(X, X)

TypeError: array() takes 1 positional argument but 2 were given

This error occurs when trying to pass the UMAP object to TensorFlow's fit method.

To fix it, we need to wrap the UMAP object in a Callable object that only takes one argument.

class UmapCallable: def init(self, umap): self.umap = umap

def __call__(self, x):
    return self.umap.transform(x)

example usage with fixed error

input_data = tf.keras.layers.Input(shape=(100,)) umap_layer = UmapLayer(n_components=2) output_data = tf.keras.layers.Lambda(UmapCallable(umap_layer.umap))(input_data) model = tf.keras.models.Model(inputs=input_data, outputs=output_data) model.compile(optimizer='adam', loss='mse')

fit model

model.fit(X, X)

写一段tensorflow 网络中间层进行umap 的代码调用时出现TypeError __array__ takes 1 positional argument but 2 were given

原文地址: https://www.cveoy.top/t/topic/bJjT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录