1

我想用以下形式制作一个网络 在此处输入图像描述

所以我写了这段代码:

numClasses = 8
epochs = 20
input_shape=(240,240,3)


#Definicion de la arquitectura del modelo
def getBaseNet(input_shape):

    # Tensores para imagenes de entrada
    #left_input = Input(input_shape)
    #right_input = Input(input_shape)

    # Esquema de red (Buscar info de LRN)
    model1 = Sequential()
    model1.add(Conv2D(96, (11, 11), activation='relu', input_shape=input_shape,name='conv1'))
    model1.add(MaxPooling2D((3, 3), strides=(2, 2), name='pool1'))
    #LRN1
    model1.add(Conv2D(384, (5, 5), activation='relu',name='conv2'))
    model1.add(MaxPooling2D((3, 3), strides=(2, 2), name='pool2'))
    #LRN2
    model1.add(Conv2D(384, (3, 3), activation='relu',name='conv3'))
    model1.add(Conv2D(384, (3, 3), activation='relu', name='conv4'))
    model1.add(Conv2D(256, (3, 3), activation='relu', name='conv5'))
    model1.add(MaxPooling2D((2, 2), strides=(2, 2), name='pool3'))
    model1.add(Flatten())
    model1.add(Dense(4096,activation='relu',name='fc1'))


def getSiameseNet(input_shape,numClasses):

    input_a = Input(shape=input_shape)
    input_b = Input(shape=input_shape)

    left=getBaseNet(input_a)
    right=getBaseNet(input_b)

    outLayers=Dense(4096, activation='relu', name='fc2')(left,right)
    outLayers=Dense(4096, activation='relu', name='fc3')(outLayers)
    outLayers=Dense(8, activation='relu', name='fc4')(outLayers)
    outLayers=Dense(numClasses, activation='softmax', name='predictions')(outLayers)

    # Connect the inputs with the outputs
    siamese_net = Model(inputs=[input_a, input_b], outputs=outLayers)

    # return the model
    return siamese_net


model = getSiameseNet(input_shape,numClasses)

model.compile(loss='categorical_crossentropy',
            optimizer='adam',
            metrics=['acc', 'mse'])
model.summary()

当我运行它时,我收到此错误:

Cannot iterate over a tensor with unknown first dimension.

我发现这是因为在这一行:

model1.add(Conv2D(96, (11, 11), activation='relu', input_shape=input_shape,name='conv1'))

input_shape 参数不正确,所以如果我输入 (240,240,3) 而不是给定的参数,它可以工作。我想知道如何解决它。

所以,如果我输入(240,240,3),那么我会得到这个错误:

OOM when allocating tensor with shape[147456,4096] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc [Op:Add] name: fc1_1/random_uniform/

我不知道如何解决这个问题。

4

0 回答 0