mirror of https://github.com/01-edu/public.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
173 lines
4.7 KiB
173 lines
4.7 KiB
2 years ago
|
#### Exercise 0: Environment and libraries
|
||
|
|
||
|
##### The exercice is validated is all questions of the exercice are validated
|
||
|
|
||
|
##### Activate the virtual environment. If you used `conda` run `conda activate your_env`
|
||
|
|
||
|
##### Run `python --version`
|
||
|
|
||
|
###### Does it print `Python 3.x`? x >= 8
|
||
|
|
||
|
##### Does `import jupyter`, `import numpy`, `import pandas`, and `import keras` run without any error ?
|
||
|
|
||
|
---
|
||
|
|
||
|
---
|
||
|
|
||
|
#### Exercise 1: Sequential
|
||
|
|
||
|
##### The question 1 is validated if the output ends with `keras.engine.sequential.Sequential object at xxx`
|
||
|
|
||
|
---
|
||
|
|
||
|
---
|
||
|
|
||
|
#### Exercise 2: Dense
|
||
|
|
||
|
##### The exercice is validated is all questions of the exercice are validated
|
||
|
|
||
|
##### The question 1 is validated if the fields `batch_input_shape`, `units` and `activation` match this output:
|
||
|
|
||
|
```
|
||
|
{'name': 'dense_7',
|
||
|
'trainable': True,
|
||
|
'batch_input_shape': (None, 5),
|
||
|
'dtype': 'float32',
|
||
|
'units': 8,
|
||
|
'activation': 'sigmoid',
|
||
|
'use_bias': True,
|
||
|
'kernel_initializer': {'class_name': 'GlorotUniform',
|
||
|
'config': {'seed': None}},
|
||
|
'bias_initializer': {'class_name': 'Zeros', 'config': {}},
|
||
|
'kernel_regularizer': None,
|
||
|
'bias_regularizer': None,
|
||
|
'activity_regularizer': None,
|
||
|
'kernel_constraint': None,
|
||
|
'bias_constraint': None}
|
||
|
```
|
||
|
|
||
|
##### The question 2 is validated if the fields `units` and `activation` match this output:
|
||
|
|
||
|
```
|
||
|
{'name': 'dense_8',
|
||
|
'trainable': True,
|
||
|
'dtype': 'float32',
|
||
|
'units': 4,
|
||
|
'activation': 'sigmoid',
|
||
|
'use_bias': True,
|
||
|
'kernel_initializer': {'class_name': 'GlorotUniform',
|
||
|
'config': {'seed': None}},
|
||
|
'bias_initializer': {'class_name': 'Zeros', 'config': {}},
|
||
|
'kernel_regularizer': None,
|
||
|
'bias_regularizer': None,
|
||
|
'activity_regularizer': None,
|
||
|
'kernel_constraint': None,
|
||
|
'bias_constraint': None}
|
||
|
```
|
||
|
|
||
|
##### The question 3 is validated if the fields `units` and `activation` match this output:
|
||
|
|
||
|
```
|
||
|
{'name': 'dense_9',
|
||
|
'trainable': True,
|
||
|
'dtype': 'float32',
|
||
|
'units': 1,
|
||
|
'activation': 'sigmoid',
|
||
|
'use_bias': True,
|
||
|
'kernel_initializer': {'class_name': 'GlorotUniform',
|
||
|
'config': {'seed': None}},
|
||
|
'bias_initializer': {'class_name': 'Zeros', 'config': {}},
|
||
|
'kernel_regularizer': None,
|
||
|
'bias_regularizer': None,
|
||
|
'activity_regularizer': None,
|
||
|
'kernel_constraint': None,
|
||
|
'bias_constraint': None}
|
||
|
```
|
||
|
|
||
|
---
|
||
|
|
||
|
---
|
||
|
|
||
|
#### Exercise 3: Architecture
|
||
|
|
||
|
##### The question 1 is validated if the code that creates the neural network is:
|
||
|
|
||
|
```
|
||
|
model = keras.Sequential()
|
||
|
model.add(Dense(8, input_shape=(5,), activation= 'sigmoid'))
|
||
|
model.add(Dense(4, activation= 'sigmoid'))
|
||
|
model.add(Dense(1, activation= 'linear'))
|
||
|
|
||
|
```
|
||
|
|
||
|
The first two layers could use another activation function that sigmoid (eg: relu)
|
||
|
|
||
|
---
|
||
|
|
||
|
---
|
||
|
|
||
|
#### Exercise 4: Optimize
|
||
|
|
||
|
##### The question 1 is validated if the output of `model.get_config()['layers']` matches the fields `batch_input_shape`, `units` and `activation`.
|
||
|
|
||
|
```
|
||
|
[{'class_name': 'InputLayer',
|
||
|
'config': {'batch_input_shape': (None, 30),
|
||
|
'dtype': 'float32',
|
||
|
'sparse': False,
|
||
|
'ragged': False,
|
||
|
'name': 'dense_134_input'}},
|
||
|
{'class_name': 'Dense',
|
||
|
'config': {'name': 'dense_134',
|
||
|
'trainable': True,
|
||
|
'batch_input_shape': (None, 30),
|
||
|
'dtype': 'float32',
|
||
|
'units': 10,
|
||
|
'activation': 'sigmoid',
|
||
|
'use_bias': True,
|
||
|
'kernel_initializer': {'class_name': 'GlorotUniform',
|
||
|
'config': {'seed': None}},
|
||
|
'bias_initializer': {'class_name': 'Zeros', 'config': {}},
|
||
|
'kernel_regularizer': None,
|
||
|
'bias_regularizer': None,
|
||
|
'activity_regularizer': None,
|
||
|
'kernel_constraint': None,
|
||
|
'bias_constraint': None}},
|
||
|
{'class_name': 'Dense',
|
||
|
'config': {'name': 'dense_135',
|
||
|
'trainable': True,
|
||
|
'dtype': 'float32',
|
||
|
'units': 5,
|
||
|
'activation': 'sigmoid',
|
||
|
'use_bias': True,
|
||
|
'kernel_initializer': {'class_name': 'GlorotUniform',
|
||
|
'config': {'seed': None}},
|
||
|
'bias_initializer': {'class_name': 'Zeros', 'config': {}},
|
||
|
'kernel_regularizer': None,
|
||
|
'bias_regularizer': None,
|
||
|
'activity_regularizer': None,
|
||
|
'kernel_constraint': None,
|
||
|
'bias_constraint': None}},
|
||
|
{'class_name': 'Dense',
|
||
|
'config': {'name': 'dense_136',
|
||
|
'trainable': True,
|
||
|
'dtype': 'float32',
|
||
|
'units': 1,
|
||
|
'activation': 'sigmoid',
|
||
|
'use_bias': True,
|
||
|
'kernel_initializer': {'class_name': 'GlorotUniform',
|
||
|
'config': {'seed': None}},
|
||
|
'bias_initializer': {'class_name': 'Zeros', 'config': {}},
|
||
|
'kernel_regularizer': None,
|
||
|
'bias_regularizer': None,
|
||
|
'activity_regularizer': None,
|
||
|
'kernel_constraint': None,
|
||
|
'bias_constraint': None}}]
|
||
|
```
|
||
|
|
||
|
You should notice that the neural network is struggling to learn. By luck the initialization of the weights might have led to an accuracy close of 90%. But when I trained the neural network, with `batch_size=300` on the data here is the ouptput of the last epoch (50):
|
||
|
|
||
|
`Epoch 50/50 2/2 [==============================] - 0s 1ms/step - loss: 0.6559 - accuracy: 0.6274`
|
||
|
|
||
|
##### The question 2 is validated if the the accuracy at epoch 50 is higher than 95%.
|