Keras代码段显示为:
second_input = inputs_d['second_input']
selected = embedding_layer(second_input)
item_average = tf.reduce_mean(selected, axis=1, keepdims=True)
second_input_encoded = tf.keras.layers.Reshape((3,))(item_average)
如果我将second_input从shape(5,)更改为shape(1,),并摆脱了reduce_mean
,则代码运行正常。
错误消息显示为:
/site-packages/tensorflow/python/util/serialization.py“,第69行,在 get_json_type 引发TypeError('Not JSON Serializable:',obj)TypeError:('Not JSON Serializable:', b“ \ n \ x04Mean \ x12 \ x04Mean \ x1a'embedding_1 / embedding_lookup / Identity_2 \ x1a \ x16Mean / reduction_indices * \ x07 \ n \ x01T \ x12 \ x020 \ x01 * \ n \ n \ x04Tidx \ x12 \ x020 \ x03 * \ x0f \ n \ tkeep_dims \ x12 \ x02(\ x01“)
答案 0 :(得分:0)
您需要使用Lambda
层来执行自定义操作:
item_average = tf.keras.layers.Lambda(lambda x: tf.reduce_mean(x, axis=1, keepdims=True))(selected)
Keras层的输出是TF张量,但是增加了一些额外的Keras特定属性,这些属性是构建模型所必需的。当您直接使用tf.reduce_mean
时,其输出将是没有那些附加属性的张量。但是,当您在Lambda
层中执行相同的操作时,将添加这些附加属性,因此一切将正常工作。
答案 1 :(得分:0)
以keras.layers模块内部的大写字母开头的对象(例如Dense,LSTM ....)是遵循Layer(...)(input)
约定的图层,而小写字母直接应用于张量。 custom loss functions或自定义图层(例如Lambda或this example)的有用的内部。