Keras confusion about number of layers

Question:

I’m a bit confused about the number of layers that are used in Keras models. The documentation is rather opaque on the matter.

According to Jason Brownlee the first layer technically consists of two layers, the input layer, specified by input_dim and a hidden layer. See the first questions on his blog.

In all of the Keras documentation the first layer is generally specified as
model.add(Dense(number_of_neurons, input_dim=number_of_cols_in_input, activtion=some_activation_function)).

The most basic model we could make would therefore be:

 model = Sequential()
 model.add(Dense(1, input_dim = 100, activation = None))

Does this model consist of a single layer, where 100 dimensional input is passed through a single input neuron, or does it consist of two layers, first a 100 dimensional input layer and second a 1 dimensional hidden layer?

Further, if I were to specify a model like this, how many layers does it have?

model = Sequential()
model.add(Dense(32, input_dim = 100, activation = 'sigmoid'))
model.add(Dense(1)))

Is this a model with 1 input layer, 1 hidden layer, and 1 output layer or is this a model with 1 input layer and 1 output layer?

Asked By: Tom Davidson

||

Answers:

Your first one consists of a 100 neurons input layer connected to one single output neuron

Your second one consists of a 100 neurons input layer, one hidden layer of 32 neurons and one output layer of one single neuron.

You have to think of your first layer as your input layer (with the same number of neurons as the dimenson, so 100 for you) connected to another layer with as many neuron as you specify (1 in your first case, 32 in the second one)

In Keras what is useful is the command

model.summary()
Answered By: Nathan

For your first question, the model is :

1 input layer and 1 output layer.

For the second question :

1 input layer

1 hidden layer

1 activation layer (The sigmoid one)

1 output layer

For the input layer, this is abstracted by Keras with the input_dim arg or input_shape, but you can find this layer in :

from keras.layers import Input

Same for the activation layer.

from keras.layers import Activation
Answered By: Pusheen_the_dev
# Create a `Sequential` model and add a Dense layer as the first layer.
model = tf.keras.models.Sequential()
model.add(tf.keras.Input(shape=(16,)))
model.add(tf.keras.layers.Dense(32, activation='relu'))
# Now the model will take as input arrays of shape (None, 16)
# and output arrays of shape (None, 32).
# Note that after the first layer, you don't need to specify
# the size of the input anymore:
model.add(tf.keras.layers.Dense(32))
model.output_shape

(None, 32)

model.layers

[<keras.layers.core.dense.Dense at 0x7f494062e950>,
<keras.layers.core.dense.Dense at 0x7f4944048d90>]

model.summary()

Output

it may help you understand clearly

Answered By: satyam pawar