SoulCRYSIS
SoulCRYSIS

Reputation: 629

How to create side output layer with Keras?

I try to make deep-learning model from this Article

enter image description here

# My code now
img_rows, img_cols = 3280, 2464
input_shape = (1, img_rows, img_cols)
model = Sequential()
model.add(Conv2D(64, (3, 3), activation='relu', input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(256, (3, 3), activation='relu'))
model.add(Conv2D(256, (3, 3), activation='relu'))
model.add(Conv2D(256, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(512, (3, 3), activation='relu'))
model.add(Conv2D(512, (3, 3), activation='relu'))
model.add(Conv2D(512, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(512, (3, 3), activation='relu'))
model.add(Conv2D(512, (3, 3), activation='relu'))
model.add(Conv2D(512, (3, 3), activation='relu'))

As you can see from picture, it has branch layers(In red rectangle) then concatenate later.

How to do that properly in Keras, or I need to use tensorflow?

Upvotes: 0

Views: 58

Answers (1)

BestDogeStackoverflow
BestDogeStackoverflow

Reputation: 1117

Don't implement the network with a sequential API, use the functional API of keras, with that it's a piece of cake.

This is an example of concatenation of parallel layers with the functional API of keras.

  branchA = Conv3D(filters=filters, kernel_size=kernel_size, padding='same')(input_layer)

  branchB = Conv3D(filters=filters, kernel_size=kernel_size, padding='same')(input_layer)

  branchC = Conv3D(filters=filters, kernel_size=kernel_size, padding='same')(input_layer)
  branchC = Conv3D(filters=filters, kernel_size=kernel_size, padding='same')(branchC )

  branchD = Conv3D(filters=filters, kernel_size=kernel_size, padding='same')(input_layer)
  branchD = Conv3D(filters=filters, kernel_size=kernel_size, padding='same')(branchD )
  branchD = Conv3D(filters=filters, kernel_size=kernel_size, padding='same')(branchD )

  finconc = concatenate([branchA, branchB, branchC, branchD], axis=-1)

reference here: https://keras.io/guides/functional_api/

Upvotes: 2

Related Questions