修改神经网络以一次预测3个示例

我这里有一个卷积神经网络,它接受一张96x96x3的图片并输出一个1×128的编码。(未定义的函数只是层的一系列)

我该如何修改架构以接受一个3x96x96x3的输入并产生一个3×128的输出(使用相同的参数前向传播3次)?

def faceRecoModel(input_shape):    """    实现用于FaceNet的Inception模型
    参数:
    input_shape -- 数据集图像的形状
    返回:
    model -- Keras中的一个Model()实例
    """    # 将输入定义为形状为input_shape的张量
    X_input = Input(input_shape)    # 零填充
    X = ZeroPadding2D((3, 3))(X_input)    # 第一块
    X = Conv2D(64, (7, 7), strides=(2, 2), name='conv1')(X)    X = BatchNormalization(axis=1, name='bn1')(X)    X = Activation('relu')(X)    # 零填充 + 最大池化
    X = ZeroPadding2D((1, 1))(X)    X = MaxPooling2D((3, 3), strides=2)(X)    # 第二块
    X = Conv2D(64, (1, 1), strides=(1, 1), name='conv2')(X)    X = BatchNormalization(axis=1, epsilon=0.00001, name='bn2')(X)    X = Activation('relu')(X)    # 零填充 + 最大池化
    X = ZeroPadding2D((1, 1))(X)    # 第二块
    X = Conv2D(192, (3, 3), strides=(1, 1), name='conv3')(X)    X = BatchNormalization(axis=1, epsilon=0.00001, name='bn3')(X)    X = Activation('relu')(X)    # 零填充 + 最大池化
    X = ZeroPadding2D((1, 1))(X)    X = MaxPooling2D(pool_size=3, strides=2)(X)    # Inception 1: a/b/c
    X = inception_block_1a(X)    X = inception_block_1b(X)    X = inception_block_1c(X)    # Inception 2: a/b
    X = inception_block_2a(X)    X = inception_block_2b(X)    # Inception 3: a/b
    X = inception_block_3a(X)    X = inception_block_3b(X)    # 顶层
    X = AveragePooling2D(pool_size=(3, 3), strides=(1, 1), data_format='channels_first')(X)    X = Flatten()(X)    X = Dense(128, name='dense_layer')(X)    # L2 归一化
    X = Lambda(lambda x: K.l2_normalize(x, axis=1))(X)    # 创建模型实例
    model = Model(inputs=X_input, outputs=X, name='FaceRecoModel')    return model

回答:

如果你想接受形状为(batch_size, 3, 96, 96, 3)的输入,即将3张图片作为一个输入样本处理,那么你需要创建一个新的模型,该模型使用你的训练模型并独立地应用于这3张图片。你可以使用Keras中的TimeDistributed包装器轻松实现这一点:

from keras.layers import TimeDistributedinp = Input(shape=(3, 96, 96, 3))out = TimeDistributed(the_trained_face_rec_model)(inp)model = Model(inp, out)

这个新模型的输出形状为(batch_size, 3, 128)。无需编译或训练这个新模型,因为它只是对你之前训练的模型的一个包装。因此,你可以使用:predictions = model.predict(my_images)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注