我正在尝试在keras lambda层中使用tensorflow唯一函数(https://www.tensorflow.org/api_docs/python/tf/unique)。 代码如下:
def unique_idx(x):
output = tf.unique(x)
return output[1]
then
inp1 = Input(batch_shape(None, 1))
idx = Lambda(unique_idx)(inp1)
model = Model(inputs=inp1, outputs=idx)
我现在使用**model.compile(optimizer='Adam', loss='mean_squared_error')**
我收到错误:
ValueError:Tensor转换为Tensor请求dtype int32 dtype float32:'Tensor(“lambda_9_sample_weights_1:0”,shape =(?,), D型= FLOAT32)'
有人知道这里的错误或使用张量流函数的不同方式吗?
答案 0 :(得分:5)
keras模型需要float32
作为输出,但indices
返回的tf.unique
为int32
。一个演员可以解决你的问题
另一个问题是,unique需要一个扁平阵列。 reshape
解决了这个问题。
import tensorflow as tf
from keras import Input
from keras.layers import Lambda
from keras.engine import Model
def unique_idx(x):
x = tf.reshape(x, [-1])
u, indices = tf.unique(x)
return tf.cast(indices, tf.float32)
x = Input(shape=(1,))
y = Lambda(unique_idx)(x)
model = Model(inputs=x, outputs=y)
model.compile(optimizer='adam', loss='mse')