Реализация операторов if в циклах for - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь оптимизировать сверточную нейронную сеть, используя поиск по сетке, но сталкиваюсь с проблемой, когда пытаюсь определить, сколько плотных и сверточных слоев следует использовать при выполнении поиска по сетке.

В идеале было бы сначала добавить сверточные слои (в зависимости от испытания), а затем добавить плотные слои.

###     ~~~CREATING MODEL~~~

dense_layers = [0, 1, 2]
conv_layers = [1, 2, 3]
layer_sizes = [16, 32, 64, 128]
layer_sizec1 = [16, 32, 64, 128]
layer_sizec2 = [16, 32, 64, 128]
layer_sizec3 = [16, 32, 64, 128]
layer_size1d = [16, 32, 64, 128]
layer_size2d = [16, 32, 64, 128]


for dense_layer in dense_layers:
    for layer_sizec1 in layer_sizec1:
        for layer_sizec2 in layer_sizec2:
            for layer_sizec3 in layer_sizec3:
                for layer_size1d in layer_size1d:
                    for layer_size2d in layer_size2d:
                        for conv_layer in conv_layers:
                            NAME = "{}-conv-{}-nodes-{}-dense-{}".format(conv_layer, layer_size, dense_layer, int(time.time()))
                            print(NAME)

                            model = Sequential()

                            model.add(Conv2D(layer_size, (3, 3), input_shape = input_shape))
                            model.add(Activation('relu'))
                            model.add(MaxPooling2D(pool_size=(2, 2)))

                            if conv_layer == '1':
                                model.add(Conv2D(layer_sizec1, (3, 3)))
                                model.add(Activation('relu'))
                                model.add(MaxPooling2D(pool_size=(2, 2)))

                            if conv_layer == '2':
                                model.add(Conv2D(layer_sizec1, (3, 3)))
                                model.add(Activation('relu'))
                                model.add(MaxPooling2D(pool_size=(2, 2)))
                                model.add(Conv2D(layer_sizec2, (3, 3)))
                                model.add(Activation('relu'))
                                model.add(MaxPooling2D(pool_size=(2, 2)))

                            if conv_layer == '3':
                                model.add(Conv2D(layer_sizec1, (3, 3)))
                                model.add(Activation('relu'))
                                model.add(MaxPooling2D(pool_size=(2, 2)))
                                model.add(Conv2D(layer_sizec2, (3, 3)))
                                model.add(Activation('relu'))
                                model.add(MaxPooling2D(pool_size=(2, 2)))
                                model.add(Conv2D(layer_sizec3, (3, 3)))
                                model.add(Activation('relu'))
                                model.add(MaxPooling2D(pool_size=(2, 2)))

                            model.add(Flatten())

                            if dense_layer == '0':

                            if dense_layer == '1':
                                model.add(Dense(layer_size1d))
                                model.add(Activation('relu'))            

                            if dense_layer == '2':
                                model.add(Dense(layer_size1d))
                                model.add(Activation('relu'))
                                model.add(Dense(layer_size2d))
                                model.add(Activation('relu'))

                            model.add(Dense(10))
                            model.add(Activation('sigmoid'))

                            model.compile(loss='sparse_categorical_crossentropy', optimizer='adam',metrics=['accuracy'])

                            model.fit(X_train, Y_train, batch_size = 128, nb_epoch = 10, validation_data=(X_val, Y_val), callbacks = [tensorboard])

Отображает следующее общее сообщение после запуска.

Error Message: 

  File "<ipython-input-33-f7d41bf08db6>", line 53
    if dense_layer == '0':
    ^
IndentationError: unexpected indent

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

вы забыли условие после

if dense_layer == '0':

Вы должны положить туда что-то, вы не можете оставить это пустым

2 голосов
/ 11 июля 2019

Это будет работать:

if dense_layer == '0':
    pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...