首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改神经网络以一次预测3个示例

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

Stack Overflow用户
提问于 2019-08-20 14:10:58
回答 3查看 72关注 0票数 0

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

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

代码语言:javascript
复制
def faceRecoModel(input_shape):
    """
    Implementation of the Inception model used for FaceNet

    Arguments:
    input_shape -- shape of the images of the dataset

    Returns:
    model -- a Model() instance in Keras
    """

    # Define the input as a tensor with shape input_shape
    X_input = Input(input_shape)

    # Zero-Padding
    X = ZeroPadding2D((3, 3))(X_input)

    # First Block
    X = Conv2D(64, (7, 7), strides=(2, 2), name='conv1')(X)
    X = BatchNormalization(axis=1, name='bn1')(X)
    X = Activation('relu')(X)

    # Zero-Padding + MAXPOOL
    X = ZeroPadding2D((1, 1))(X)
    X = MaxPooling2D((3, 3), strides=2)(X)

    # Second Block
    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)

    # Zero-Padding + MAXPOOL
    X = ZeroPadding2D((1, 1))(X)

    # Second Block
    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)

    # Zero-Padding + MAXPOOL
    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)

    # Top layer
    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 normalization
    X = Lambda(lambda x: K.l2_normalize(x, axis=1))(X)

    # Create model instance
    model = Model(inputs=X_input, outputs=X, name='FaceRecoModel')

    return model
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-08-21 04:29:13

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

代码语言:javascript
复制
from keras.layers import TimeDistributed

inp = 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)

票数 0
EN

Stack Overflow用户

发布于 2019-08-20 14:32:04

编辑:正如op所提到的,网络应该一次处理3个图像,因为数据集将是形状(m,3,96,96,3),那么一种简单的方法是以并行的方式创建三个标准的初始网络,然后将从每个网络接收的输出连接起来。

票数 0
EN

Stack Overflow用户

发布于 2019-08-20 14:33:35

你不需要修改任何东西,Keras中输入的第一个维度总是批处理维度,所以你真的需要输入shape (3, 96, 96, 3),然后你就会得到一个对应的(3, 128)输出。不需要修改代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57567572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档