Keras文档说,fit和valuate函数中的y参数可以设置为None,这实际上是默认值。 (我在下面缩短了功能定义,以节省一些空间。)
fit(self, x=None, **y=None**, ...)
evaluate(self, x=None, **y=None**, ...)
文档将值 无 的动机如下: “如果从框架本机张量(例如TensorFlow数据张量)馈送,则y可以为None(默认)。”
这并不能告诉我太多。谁能解释这到底意味着什么?如果可以举一个简短的例子,将不胜感激。
提前谢谢!
ADDENDUM1
例如,假设以下代码段
model = ResNet50(weights='imagenet')
x = model.get_layer('flatten_1').output # layer 'flatten_1' is the last layer of the "model"
model_out = Dense(128, activation='relu', name='model_out')(x)
model_out = Lambda(lambda x: K.l2_normalize(x,axis=-1))(model_out)
new_model = Model(inputs=model.input, outputs=model_out)
anchor_input = Input(shape=(224, 224, 3), name='anchor_input')
pos_input = Input(shape=(224, 224, 3), name='pos_input')
neg_input = Input(shape=(224, 224, 3), name='neg_input')
encoding_anchor = new_model(anchor_input)
encoding_pos = new_model(pos_input)
encoding_neg = new_model(neg_input)
loss = Lambda(triplet_loss)([encoding_anchor, encoding_pos, encoding_neg])
siamese_network = Model(inputs = [anchor_input, pos_input, neg_input],
outputs = loss)
siamese_network.compile(optimizer=Adam(lr=.00003), loss=identity_loss)
在此示例中,当我稍后运行Keras的fit和/或评估函数时,应如何设置 y 参数?
附录2:
这是上面的代码中提到的Triplet_loss函数:
def triplet_loss(inputs):
anchor, positive, negative = inputs
positive_distance = K.square(anchor - positive)
negative_distance = K.square(anchor - negative)
positive_distance = K.sqrt(K.sum(positive_distance, axis=-1, keepdims=True))
negative_distance = K.sqrt(K.sum(negative_distance, axis=-1, keepdims=True))
loss = K.maximum(0.0, 2 + loss)
return K.mean(loss)
答案 0 :(得分:3)
这是一个好问题。即使不经常使用,Keras允许提供框架本机张量,而不是通过占位符提供。考虑以下示例:
from keras.models import Model
from keras.layers import Dense, Input
import tensorflow as tf
# TensorFlow native tensors
a = tf.random_uniform(shape=(32, 1,), maxval=1)
b = 2*a
# Keras model
x = Input(shape=(1,), tensor=a)
h = Dense(1)(x)
model = Model(x, h)
model.compile('sgd', 'mse', target_tensors=[b])
# Train + evaluate
model.fit(steps_per_epoch=1000)
print('MSE: {}'.format(model.evaluate(steps=10)))
在这里,我们通过keras.layers.Input中的参数tensor
指定模型的输入。在这种情况下,Keras没有定义占位符(通常会通过model.fit中的参数x
来填充占位符)。相反,TensorFlow张量a
直接连接到x
。同样,可以通过model.compile中的target_tensors
来定义目标。
从框架本机张量进给时,应将model.fit的参数steps_per_epoch
设置为构成一个纪元的批数,而model.evaluate的参数steps
然后是用于评估模型的批次数量。