所以我写了这段代码:
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/
我不知道如何解决这个问题。