Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python和Keras制作暹罗网的问题_Python_Keras_Siamese Network - Fatal编程技术网

用Python和Keras制作暹罗网的问题

用Python和Keras制作暹罗网的问题,python,keras,siamese-network,Python,Keras,Siamese Network,我想用下面的表格建立一个网络 所以我写了这段代码: 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 = In

我想用下面的表格建立一个网络

所以我写了这段代码:

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.
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/
我发现这是因为在这一行:

model1.add(Conv2D(96, (11, 11), activation='relu', input_shape=input_shape,name='conv1'))
input_shape参数不正确,因此如果我将(240240,3)替换为给定的参数,它将正常工作。我想知道如何解决它

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

Cannot iterate over a tensor with unknown first dimension.
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/
我不知道如何解决这个问题