Python Tensorflow(Keras API)`model.fit`method returns";无法转换类型为<;的对象;类别';元组'&燃气轮机;“到张量”;错误
我正在按照Python Tensorflow(Keras API)`model.fit`method returns";无法转换类型为<;的对象;类别';元组'&燃气轮机;“到张量”;错误,python,tensorflow,machine-learning,keras,Python,Tensorflow,Machine Learning,Keras,我正在按照tf.random.normal方法使用高斯噪声(或通过kerasAPI使用K.random\u normal) 它在自定义tensorflow层中使用,而自定义模型则使用该层 出于某种原因,当直接调用层/模型时,或通过tf.GradientTape()使用自定义训练循环时,一切都按预期工作,但当尝试使用fit方法时,它会抛出一个令人费解的错误 它似乎与推断批处理维度有关,在调用fit方法时,批处理维度显示为None 我怀疑这与编译和符号张量与渴望张量有关,但我并不知道如何解决这个问题
tf.random.normal
方法使用高斯噪声(或通过keras
API使用K.random\u normal
)
它在自定义tensorflow
层
中使用,而自定义模型
则使用该层
出于某种原因,当直接调用层/模型时,或通过tf.GradientTape()
使用自定义训练循环时,一切都按预期工作,但当尝试使用fit
方法时,它会抛出一个令人费解的错误
它似乎与推断批处理维度有关,在调用fit
方法时,批处理维度显示为None
我怀疑这与编译和符号张量与渴望张量有关,但我并不知道如何解决这个问题
我试图将问题归结为一个再现问题的最小示例:
将numpy导入为np
将tensorflow.keras.backend作为K导入
来自tensorflow.keras导入模型
导入tensorflow作为tf
课堂演示(models.Model):
定义初始化(自):
super()。\uuuu init\uuuuu()
def呼叫(自我、输入、培训=无、掩码=无):
#批处理在直接调用或通过GradientTape()调用时给出“2”
#通过fit调用时提供“无”
批次=K.int_形状(输入)[0]
尺寸=K.int_形状(输入)[1]
噪声=tf.随机.正常(形状=(批次,尺寸),平均值=0.0,标准差=1.0)
#手动指定批次维度确实有效,例如。
#噪声=tf.随机.正常(形状=(2,尺寸),平均值=0.0,标准差=1.0)
返回输入*噪声
测试数据=np.数组([[1,2,3,4.],[5,6,7,8.]))
tester=Demo()
编译(优化器='adam')
#人工呼叫工作
打印(测试数据-测试仪(测试数据))
#但称之为“健康”并不重要
tester.fit(x=测试数据)
#引发:TypeError:无法将类型的对象转换为Tensor。
#内容:(无,4)。将铸造元素考虑为支持类型。
有什么问题的建议吗?在
调用
方法中,不要使用keras.backend
获取批处理
和dim
,直接使用tensorflow
batch = tf.shape(inputs)[0]
dim = tf.shape(inputs)[1]