写一段tensorflow 网络中间层进行umap 的代码调用时出现TypeError __array__ takes 1 positional argument but 2 were given
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)
原文地址: https://www.cveoy.top/t/topic/bJjT 著作权归作者所有。请勿转载和采集!