Я хочу создать сеть со следующей формой
Итак, я написал этот код:
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/
И я понятия не имею, как решить этот.