diff --git a/docker/fidle_env_test.py b/docker/fidle_env_test.py
index f3b631d1530525fb65c0551f0cfdc640818ab1df..592e6eb4ee86ec4169da55b726f9237eb99bafb8 100644
--- a/docker/fidle_env_test.py
+++ b/docker/fidle_env_test.py
@@ -3,6 +3,7 @@
 ##
 
 import tensorflow as tf
+import torch
 import sys, os
 
 # Check data set is found
@@ -16,5 +17,12 @@ print("FIDLE_DATASETS_DIR = ", os.path.expanduser(datasets_dir))
 print("Python version = {}.{}".format(sys.version_info[0], sys.version_info[1]))
 # Check tensorflow version
 print("Tensorflow version = ", tf.__version__)
+# Obsolete command
+#print("Tensorflow GPU/CUDA available = ", tf.test.is_gpu_available())
+print("Tensorflow GPU/CUDA available = ", "true" if len(tf.config.list_physical_devices('GPU')) else "False")
+
+# Chech Pytorch version
+print("Pytorch version = ", torch.__version__)
+print("Pytorch GPU/CUDA available = ", torch.cuda.is_available())
 
 sys.exit(0)
diff --git a/docker/fidle_python_pip.dockerfile b/docker/fidle_python_pip.dockerfile
index a305e4a4f6e5582754b0bd536f22498e503ffa9b..07bd9dd3f7716cb67d88814ebff9dc87a9172f36 100644
--- a/docker/fidle_python_pip.dockerfile
+++ b/docker/fidle_python_pip.dockerfile
@@ -11,9 +11,12 @@ LABEL maintainer=soraya.arias@inria.fr
 ENV LANG=C.UTF-8 LC_ALL=C.UTF-8 DEBIAN_FRONTEND=noninteractive
 
 RUN apt update --fix-missing && \
-    apt install -y apt-utils wget git \
+    apt install -y --no-install-recommends apt-utils && \
+    apt install wget curl git \
         python3-venv python3-pip && \
     apt -y dist-upgrade && \
+    curl -fsSL https://deb.nodesource.com/setup_lts.x |  bash - && \
+    apt install -y nodejs && \
     apt clean && \
     rm -fr /var/lib/apt/lists/*
 
@@ -35,8 +38,7 @@ RUN mkdir /notebooks/; cd /notebooks && \
     git clone https://gricad-gitlab.univ-grenoble-alpes.fr/talks/fidle.git
 
 # Add Jupyter configuration (no browser, listen all interfaces, ...)
-#COPY jupyter_notebook_config.py /root/.jupyter/jupyter_notebook_config.py
-COPY notebook.json /root/.jupyter/nbconfig/notebook.json
+COPY jupyter_lab_config.py /root/.jupyter/jupyter_lab_config.py
 COPY fidle_env_test.py /root/fidle_env_test.py
 
 # Jupyter notebook uses 8888 
@@ -55,4 +57,4 @@ ENV SHELL=/bin/bash
 ENV FIDLE_DATASETS_DIR=/data/fidle-datasets
 
 # Run a notebook by default
-CMD ["jupyter", "notebook", "--port=8888", "--ip=*", "--allow-root", "--notebook-dir=/notebooks/fidle", "--no-browser"]
+CMD ["jupyter", "lab"]
diff --git a/docker/jupyter_lab_config.py b/docker/jupyter_lab_config.py
new file mode 100644
index 0000000000000000000000000000000000000000..81d0a2bb825a1bf4bd2eaabdeaa9996ce9b5c2f0
--- /dev/null
+++ b/docker/jupyter_lab_config.py
@@ -0,0 +1,1018 @@
+# Configuration file for lab.
+
+#------------------------------------------------------------------------------
+# Application(SingletonConfigurable) configuration
+#------------------------------------------------------------------------------
+## This is an application.
+
+## Set the log level by value or name.
+#  Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']
+#  Default: 30
+c.Application.log_level = 'INFO'
+
+#------------------------------------------------------------------------------
+# JupyterApp(Application) configuration
+#------------------------------------------------------------------------------
+## Base class for Jupyter applications
+
+## Answer yes to any prompts.
+#  Default: False
+# c.JupyterApp.answer_yes = False
+
+## Full path of a config file.
+#  Default: ''
+# c.JupyterApp.config_file = ''
+
+## Specify a config file to load.
+#  Default: ''
+# c.JupyterApp.config_file_name = ''
+
+## Generate default config file.
+#  Default: False
+# c.JupyterApp.generate_config = False
+
+## The date format used by logging formatters for %(asctime)s
+#  See also: Application.log_datefmt
+# c.JupyterApp.log_datefmt = '%Y-%m-%d %H:%M:%S'
+
+## The Logging format template
+#  See also: Application.log_format
+# c.JupyterApp.log_format = '[%(name)s]%(highlevel)s %(message)s'
+
+## Set the log level by value or name.
+#  See also: Application.log_level
+# c.JupyterApp.log_level = 30
+
+## Instead of starting the Application, dump configuration to stdout
+#  See also: Application.show_config
+# c.JupyterApp.show_config = False
+
+## Instead of starting the Application, dump configuration to stdout (as JSON)
+#  See also: Application.show_config_json
+# c.JupyterApp.show_config_json = False
+
+#------------------------------------------------------------------------------
+# ExtensionApp(JupyterApp) configuration
+#------------------------------------------------------------------------------
+## Base class for configurable Jupyter Server Extension Applications.
+#  
+#      ExtensionApp subclasses can be initialized two ways:
+#      1. Extension is listed as a jpserver_extension, and ServerApp calls
+#          its load_jupyter_server_extension classmethod. This is the
+#          classic way of loading a server extension.
+#      2. Extension is launched directly by calling its `launch_instance`
+#          class method. This method can be set as a entry_point in
+#          the extensions setup.py
+
+## Answer yes to any prompts.
+#  See also: JupyterApp.answer_yes
+# c.ExtensionApp.answer_yes = False
+
+## Full path of a config file.
+#  See also: JupyterApp.config_file
+# c.ExtensionApp.config_file = ''
+
+## Specify a config file to load.
+#  See also: JupyterApp.config_file_name
+# c.ExtensionApp.config_file_name = ''
+
+#  Default: ''
+# c.ExtensionApp.default_url = ''
+
+## Generate default config file.
+#  See also: JupyterApp.generate_config
+# c.ExtensionApp.generate_config = False
+
+## Handlers appended to the server.
+#  Default: []
+# c.ExtensionApp.handlers = []
+
+## The date format used by logging formatters for %(asctime)s
+#  See also: Application.log_datefmt
+# c.ExtensionApp.log_datefmt = '%Y-%m-%d %H:%M:%S'
+
+## The Logging format template
+#  See also: Application.log_format
+# c.ExtensionApp.log_format = '[%(name)s]%(highlevel)s %(message)s'
+
+## Set the log level by value or name.
+#  See also: Application.log_level
+# c.ExtensionApp.log_level = 30
+
+## Whether to open in a browser after starting.
+#          The specific browser used is platform dependent and
+#          determined by the python standard library `webbrowser`
+#          module, unless it is overridden using the --browser
+#          (ServerApp.browser) configuration option.
+#  Default: False
+# c.ExtensionApp.open_browser = False
+
+## Settings that will passed to the server.
+#  Default: {}
+# c.ExtensionApp.settings = {}
+
+## Instead of starting the Application, dump configuration to stdout
+#  See also: Application.show_config
+# c.ExtensionApp.show_config = False
+
+## Instead of starting the Application, dump configuration to stdout (as JSON)
+#  See also: Application.show_config_json
+# c.ExtensionApp.show_config_json = False
+
+## paths to search for serving static files.
+#  
+#          This allows adding javascript/css to be available from the notebook server machine,
+#          or overriding individual files in the IPython
+#  Default: []
+# c.ExtensionApp.static_paths = []
+
+## Url where the static assets for the extension are served.
+#  Default: ''
+# c.ExtensionApp.static_url_prefix = ''
+
+## Paths to search for serving jinja templates.
+#  
+#          Can be used to override templates from notebook.templates.
+#  Default: []
+# c.ExtensionApp.template_paths = []
+
+#------------------------------------------------------------------------------
+# LabServerApp(ExtensionApp) configuration
+#------------------------------------------------------------------------------
+## A Lab Server Application that runs out-of-the-box
+
+## "A list of comma-separated URIs to get the allowed extensions list
+#  
+#  .. versionchanged:: 2.0.0
+#      `LabServerApp.whitetlist_uris` renamed to `allowed_extensions_uris`
+#  Default: ''
+# c.LabServerApp.allowed_extensions_uris = ''
+
+## Answer yes to any prompts.
+#  See also: JupyterApp.answer_yes
+# c.LabServerApp.answer_yes = False
+
+## The application settings directory.
+#  Default: ''
+# c.LabServerApp.app_settings_dir = ''
+
+## The url path for the application.
+#  Default: '/lab'
+# c.LabServerApp.app_url = '/lab'
+
+## Deprecated, use `LabServerApp.blocked_extensions_uris`
+#  Default: ''
+# c.LabServerApp.blacklist_uris = ''
+
+## A list of comma-separated URIs to get the blocked extensions list
+#  
+#  .. versionchanged:: 2.0.0
+#      `LabServerApp.blacklist_uris` renamed to `blocked_extensions_uris`
+#  Default: ''
+# c.LabServerApp.blocked_extensions_uris = ''
+
+## Whether to cache files on the server. This should be `True` except in dev
+#  mode.
+#  Default: True
+# c.LabServerApp.cache_files = True
+
+## Full path of a config file.
+#  See also: JupyterApp.config_file
+# c.LabServerApp.config_file = ''
+
+## Specify a config file to load.
+#  See also: JupyterApp.config_file_name
+# c.LabServerApp.config_file_name = ''
+
+## Extra paths to look for federated JupyterLab extensions
+#  Default: []
+# c.LabServerApp.extra_labextensions_path = []
+
+## Generate default config file.
+#  See also: JupyterApp.generate_config
+# c.LabServerApp.generate_config = False
+
+## Handlers appended to the server.
+#  See also: ExtensionApp.handlers
+# c.LabServerApp.handlers = []
+
+## Options to pass to the jinja2 environment for this
+#  Default: {}
+# c.LabServerApp.jinja2_options = {}
+
+## The standard paths to look in for federated JupyterLab extensions
+#  Default: []
+# c.LabServerApp.labextensions_path = []
+
+## The url for federated JupyterLab extensions
+#  Default: ''
+# c.LabServerApp.labextensions_url = ''
+
+## The interval delay in seconds to refresh the lists
+#  Default: 3600
+# c.LabServerApp.listings_refresh_seconds = 3600
+
+## The optional kwargs to use for the listings HTTP requests             as
+#  described on https://2.python-requests.org/en/v2.7.0/api/#requests.request
+#  Default: {}
+# c.LabServerApp.listings_request_options = {}
+
+## The listings url.
+#  Default: ''
+# c.LabServerApp.listings_url = ''
+
+## The date format used by logging formatters for %(asctime)s
+#  See also: Application.log_datefmt
+# c.LabServerApp.log_datefmt = '%Y-%m-%d %H:%M:%S'
+
+## The Logging format template
+#  See also: Application.log_format
+# c.LabServerApp.log_format = '[%(name)s]%(highlevel)s %(message)s'
+
+## Set the log level by value or name.
+#  See also: Application.log_level
+# c.LabServerApp.log_level = 30
+
+## Whether to open in a browser after starting.
+#  See also: ExtensionApp.open_browser
+# c.LabServerApp.open_browser = False
+
+## The optional location of the settings schemas directory. If given, a handler
+#  will be added for settings.
+#  Default: ''
+# c.LabServerApp.schemas_dir = ''
+
+## Settings that will passed to the server.
+#  See also: ExtensionApp.settings
+# c.LabServerApp.settings = {}
+
+## The url path of the settings handler.
+#  Default: ''
+# c.LabServerApp.settings_url = ''
+
+## Instead of starting the Application, dump configuration to stdout
+#  See also: Application.show_config
+# c.LabServerApp.show_config = False
+
+## Instead of starting the Application, dump configuration to stdout (as JSON)
+#  See also: Application.show_config_json
+# c.LabServerApp.show_config_json = False
+
+## The optional location of local static files. If given, a static file handler
+#  will be added.
+#  Default: ''
+# c.LabServerApp.static_dir = ''
+
+## paths to search for serving static files.
+#  See also: ExtensionApp.static_paths
+# c.LabServerApp.static_paths = []
+
+## Url where the static assets for the extension are served.
+#  See also: ExtensionApp.static_url_prefix
+# c.LabServerApp.static_url_prefix = ''
+
+## Paths to search for serving jinja templates.
+#  See also: ExtensionApp.template_paths
+# c.LabServerApp.template_paths = []
+
+## The application templates directory.
+#  Default: ''
+# c.LabServerApp.templates_dir = ''
+
+## The optional location of the themes directory. If given, a handler will be
+#  added for themes.
+#  Default: ''
+# c.LabServerApp.themes_dir = ''
+
+## The theme url.
+#  Default: ''
+# c.LabServerApp.themes_url = ''
+
+## The url path of the translations handler.
+#  Default: ''
+# c.LabServerApp.translations_api_url = ''
+
+## The url path of the tree handler.
+#  Default: ''
+# c.LabServerApp.tree_url = ''
+
+## The optional location of the user settings directory.
+#  Default: ''
+# c.LabServerApp.user_settings_dir = ''
+
+## Deprecated, use `LabServerApp.allowed_extensions_uris`
+#  Default: ''
+# c.LabServerApp.whitelist_uris = ''
+
+## The url path of the workspaces API.
+#  Default: ''
+# c.LabServerApp.workspaces_api_url = ''
+
+## The optional location of the saved workspaces directory. If given, a handler
+#  will be added for workspaces.
+#  Default: ''
+# c.LabServerApp.workspaces_dir = ''
+
+#------------------------------------------------------------------------------
+# LabApp(LabServerApp) configuration
+#------------------------------------------------------------------------------
+## 
+#  See also: LabServerApp.allowed_extensions_uris
+# c.LabApp.allowed_extensions_uris = ''
+
+## Answer yes to any prompts.
+#  See also: JupyterApp.answer_yes
+# c.LabApp.answer_yes = False
+
+## The app directory to launch JupyterLab from.
+#  Default: None
+# c.LabApp.app_dir = None
+
+## The application settings directory.
+#  Default: ''
+# c.LabApp.app_settings_dir = ''
+
+## The url path for the application.
+#  Default: '/lab'
+# c.LabApp.app_url = '/lab'
+
+## Deprecated, use `LabServerApp.blocked_extensions_uris`
+#  See also: LabServerApp.blacklist_uris
+# c.LabApp.blacklist_uris = ''
+
+## 
+#  See also: LabServerApp.blocked_extensions_uris
+# c.LabApp.blocked_extensions_uris = ''
+
+## Whether to cache files on the server. This should be `True` except in dev
+#  mode.
+#  Default: True
+# c.LabApp.cache_files = True
+
+## Whether to enable collaborative mode (experimental).
+#  Default: False
+# c.LabApp.collaborative = False
+
+## Full path of a config file.
+#  See also: JupyterApp.config_file
+# c.LabApp.config_file = ''
+
+## Specify a config file to load.
+#  See also: JupyterApp.config_file_name
+# c.LabApp.config_file_name = ''
+
+## Whether to start the app in core mode. In this mode, JupyterLab
+#          will run using the JavaScript assets that are within the installed
+#          JupyterLab Python package. In core mode, third party extensions are disabled.
+#          The `--dev-mode` flag is an alias to this to be used when the Python package
+#          itself is installed in development mode (`pip install -e .`).
+#  Default: False
+# c.LabApp.core_mode = False
+
+## The default URL to redirect to from `/`
+#  Default: '/lab'
+# c.LabApp.default_url = '/lab'
+
+## Whether to start the app in dev mode. Uses the unpublished local
+#          JavaScript packages in the `dev_mode` folder.  In this case JupyterLab will
+#          show a red stripe at the top of the page.  It can only be used if JupyterLab
+#          is installed as `pip install -e .`.
+#  Default: False
+# c.LabApp.dev_mode = False
+
+## Whether to expose the global app instance to browser via window.jupyterlab
+#  Default: False
+# c.LabApp.expose_app_in_browser = False
+
+## Whether to load prebuilt extensions in dev mode. This may be
+#          useful to run and test prebuilt extensions in development installs of
+#          JupyterLab. APIs in a JupyterLab development install may be
+#          incompatible with published packages, so prebuilt extensions compiled
+#          against published packages may not work correctly.
+#  Default: False
+# c.LabApp.extensions_in_dev_mode = False
+
+## Extra paths to look for federated JupyterLab extensions
+#  Default: []
+# c.LabApp.extra_labextensions_path = []
+
+## Generate default config file.
+#  See also: JupyterApp.generate_config
+# c.LabApp.generate_config = False
+
+## Handlers appended to the server.
+#  See also: ExtensionApp.handlers
+# c.LabApp.handlers = []
+
+## Options to pass to the jinja2 environment for this
+#  Default: {}
+# c.LabApp.jinja2_options = {}
+
+## The standard paths to look in for federated JupyterLab extensions
+#  Default: []
+# c.LabApp.labextensions_path = []
+
+## The url for federated JupyterLab extensions
+#  Default: ''
+# c.LabApp.labextensions_url = ''
+
+## The interval delay in seconds to refresh the lists
+#  See also: LabServerApp.listings_refresh_seconds
+# c.LabApp.listings_refresh_seconds = 3600
+
+## The optional kwargs to use for the listings HTTP requests             as
+#  described on https://2.python-requests.org/en/v2.7.0/api/#requests.request
+#  See also: LabServerApp.listings_request_options
+# c.LabApp.listings_request_options = {}
+
+## The listings url.
+#  Default: ''
+# c.LabApp.listings_url = ''
+
+## The date format used by logging formatters for %(asctime)s
+#  See also: Application.log_datefmt
+# c.LabApp.log_datefmt = '%Y-%m-%d %H:%M:%S'
+
+## The Logging format template
+#  See also: Application.log_format
+# c.LabApp.log_format = '[%(name)s]%(highlevel)s %(message)s'
+
+## Set the log level by value or name.
+#  See also: Application.log_level
+# c.LabApp.log_level = 30
+
+## Whether to open in a browser after starting.
+#  See also: ExtensionApp.open_browser
+# c.LabApp.open_browser = False
+
+## The override url for static lab assets, typically a CDN.
+#  Default: ''
+# c.LabApp.override_static_url = ''
+
+## The override url for static lab theme assets, typically a CDN.
+#  Default: ''
+# c.LabApp.override_theme_url = ''
+
+## The optional location of the settings schemas directory. If given, a handler
+#  will be added for settings.
+#  Default: ''
+# c.LabApp.schemas_dir = ''
+
+## Settings that will passed to the server.
+#  See also: ExtensionApp.settings
+# c.LabApp.settings = {}
+
+## The url path of the settings handler.
+#  Default: ''
+# c.LabApp.settings_url = ''
+
+## Instead of starting the Application, dump configuration to stdout
+#  See also: Application.show_config
+# c.LabApp.show_config = False
+
+## Instead of starting the Application, dump configuration to stdout (as JSON)
+#  See also: Application.show_config_json
+# c.LabApp.show_config_json = False
+
+## Splice source packages into app directory.
+#  Default: False
+# c.LabApp.splice_source = False
+
+## The optional location of local static files. If given, a static file handler
+#  will be added.
+#  Default: ''
+# c.LabApp.static_dir = ''
+
+## paths to search for serving static files.
+#  See also: ExtensionApp.static_paths
+# c.LabApp.static_paths = []
+
+## Url where the static assets for the extension are served.
+#  See also: ExtensionApp.static_url_prefix
+# c.LabApp.static_url_prefix = ''
+
+## Paths to search for serving jinja templates.
+#  See also: ExtensionApp.template_paths
+# c.LabApp.template_paths = []
+
+## The application templates directory.
+#  Default: ''
+# c.LabApp.templates_dir = ''
+
+## The optional location of the themes directory. If given, a handler will be
+#  added for themes.
+#  Default: ''
+# c.LabApp.themes_dir = ''
+
+## The theme url.
+#  Default: ''
+# c.LabApp.themes_url = ''
+
+## The url path of the translations handler.
+#  Default: ''
+# c.LabApp.translations_api_url = ''
+
+## The url path of the tree handler.
+#  Default: ''
+# c.LabApp.tree_url = ''
+
+## The directory for user settings.
+#  Default: '/root/.jupyter/lab/user-settings'
+# c.LabApp.user_settings_dir = '/root/.jupyter/lab/user-settings'
+
+## Whether to serve the app in watch mode
+#  Default: False
+# c.LabApp.watch = False
+
+## Deprecated, use `LabServerApp.allowed_extensions_uris`
+#  See also: LabServerApp.whitelist_uris
+# c.LabApp.whitelist_uris = ''
+
+## The url path of the workspaces API.
+#  Default: ''
+# c.LabApp.workspaces_api_url = ''
+
+## The directory for workspaces
+#  Default: '/root/.jupyter/lab/workspaces'
+# c.LabApp.workspaces_dir = '/root/.jupyter/lab/workspaces'
+
+#------------------------------------------------------------------------------
+# ServerApp(JupyterApp) configuration
+#------------------------------------------------------------------------------
+## Set the Access-Control-Allow-Credentials: true header
+#  Default: False
+# c.ServerApp.allow_credentials = False
+
+## Set the Access-Control-Allow-Origin header
+#  
+#          Use '*' to allow any origin to access your server.
+#  
+#          Takes precedence over allow_origin_pat.
+#  Default: ''
+# c.ServerApp.allow_origin = ''
+
+## Use a regular expression for the Access-Control-Allow-Origin header
+#  
+#          Requests from an origin matching the expression will get replies with:
+#  
+#              Access-Control-Allow-Origin: origin
+#  
+#          where `origin` is the origin of the request.
+#  
+#          Ignored if allow_origin is set.
+#  Default: ''
+# c.ServerApp.allow_origin_pat = ''
+
+## Allow password to be changed at login for the Jupyter server.
+#  
+#                      While logging in with a token, the Jupyter server UI will give the opportunity to
+#                      the user to enter a new password at the same time that will replace
+#                      the token login mechanism.
+#  
+#                      This can be set to false to prevent changing password from
+#  the UI/API.
+#  Default: True
+c.ServerApp.allow_password_change = False
+
+## Allow requests where the Host header doesn't point to a local server
+#  
+#         By default, requests get a 403 forbidden response if the 'Host' header
+#         shows that the browser thinks it's on a non-local domain.
+#         Setting this option to True disables this check.
+#  
+#         This protects against 'DNS rebinding' attacks, where a remote web server
+#         serves you a page and then changes its DNS to send later requests to a
+#         local IP, bypassing same-origin checks.
+#  
+#         Local IP addresses (such as 127.0.0.1 and ::1) are allowed as local,
+#         along with hostnames configured in local_hostnames.
+#  Default: False
+# c.ServerApp.allow_remote_access = False
+
+## Whether to allow the user to run the server as root.
+#  Default: False
+c.ServerApp.allow_root = True
+
+## Answer yes to any prompts.
+#  See also: JupyterApp.answer_yes
+# c.ServerApp.answer_yes = False
+
+## "
+#          Require authentication to access prometheus metrics.
+#  Default: True
+# c.ServerApp.authenticate_prometheus = True
+
+## Reload the webapp when changes are made to any Python src files.
+#  Default: False
+# c.ServerApp.autoreload = False
+
+## The base URL for the Jupyter server.
+#  
+#                         Leading and trailing slashes can be omitted,
+#                         and will automatically be added.
+#  Default: '/'
+# c.ServerApp.base_url = '/'
+
+## Specify what command to use to invoke a web
+#                        browser when starting the server. If not specified, the
+#                        default browser will be determined by the `webbrowser`
+#                        standard library module, which allows setting of the
+#                        BROWSER environment variable to override it.
+#  Default: ''
+# c.ServerApp.browser = ''
+
+## The full path to an SSL/TLS certificate file.
+#  Default: ''
+# c.ServerApp.certfile = ''
+
+## The full path to a certificate authority certificate for SSL/TLS client
+#  authentication.
+#  Default: ''
+# c.ServerApp.client_ca = ''
+
+## Full path of a config file.
+#  See also: JupyterApp.config_file
+# c.ServerApp.config_file = ''
+
+## Specify a config file to load.
+#  See also: JupyterApp.config_file_name
+# c.ServerApp.config_file_name = ''
+
+## The config manager class to use
+#  Default: 'jupyter_server.services.config.manager.ConfigManager'
+# c.ServerApp.config_manager_class = 'jupyter_server.services.config.manager.ConfigManager'
+
+## The content manager class to use.
+#  Default: 'jupyter_server.services.contents.largefilemanager.LargeFileManager'
+# c.ServerApp.contents_manager_class = 'jupyter_server.services.contents.largefilemanager.LargeFileManager'
+
+## Extra keyword arguments to pass to `set_secure_cookie`. See tornado's
+#  set_secure_cookie docs for details.
+#  Default: {}
+# c.ServerApp.cookie_options = {}
+
+## The random bytes used to secure cookies.
+#          By default this is a new random number every time you start the server.
+#          Set it to a value in a config file to enable logins to persist across server sessions.
+#  
+#          Note: Cookie secrets should be kept private, do not share config files with
+#          cookie_secret stored in plaintext (you can read the value from a file).
+#  Default: b''
+# c.ServerApp.cookie_secret = b''
+
+## The file where the cookie secret is stored.
+#  Default: ''
+# c.ServerApp.cookie_secret_file = ''
+
+## Override URL shown to users.
+#  
+#          Replace actual URL, including protocol, address, port and base URL,
+#          with the given value when displaying URL to the users. Do not change
+#          the actual connection URL. If authentication token is enabled, the
+#          token is added to the custom URL automatically.
+#  
+#          This option is intended to be used when the URL to display to the user
+#          cannot be determined reliably by the Jupyter server (proxified
+#          or containerized setups for example).
+#  Default: ''
+# c.ServerApp.custom_display_url = ''
+
+## The default URL to redirect to from `/`
+#  Default: '/'
+# c.ServerApp.default_url = '/'
+
+## Disable cross-site-request-forgery protection
+#  
+#          Jupyter notebook 4.3.1 introduces protection from cross-site request forgeries,
+#          requiring API requests to either:
+#  
+#          - originate from pages served by this server (validated with XSRF cookie and token), or
+#          - authenticate with a token
+#  
+#          Some anonymous compute resources still desire the ability to run code,
+#          completely without authentication.
+#          These services can disable all authentication and security checks,
+#          with the full knowledge of what that implies.
+#  Default: False
+# c.ServerApp.disable_check_xsrf = False
+
+## handlers that should be loaded at higher priority than the default services
+#  Default: []
+# c.ServerApp.extra_services = []
+
+## Extra paths to search for serving static files.
+#  
+#          This allows adding javascript/css to be available from the Jupyter server machine,
+#          or overriding individual files in the IPython
+#  Default: []
+# c.ServerApp.extra_static_paths = []
+
+## Extra paths to search for serving jinja templates.
+#  
+#          Can be used to override templates from jupyter_server.templates.
+#  Default: []
+# c.ServerApp.extra_template_paths = []
+
+## Open the named file when the application is launched.
+#  Default: ''
+# c.ServerApp.file_to_run = ''
+
+## The URL prefix where files are opened directly.
+#  Default: 'notebooks'
+# c.ServerApp.file_url_prefix = 'notebooks'
+
+## Generate default config file.
+#  See also: JupyterApp.generate_config
+# c.ServerApp.generate_config = False
+
+## Extra keyword arguments to pass to `get_secure_cookie`. See tornado's
+#  get_secure_cookie docs for details.
+#  Default: {}
+# c.ServerApp.get_secure_cookie_kwargs = {}
+
+## (bytes/sec)
+#          Maximum rate at which stream output can be sent on iopub before they are
+#          limited.
+#  Default: 1000000
+# c.ServerApp.iopub_data_rate_limit = 1000000
+
+## (msgs/sec)
+#          Maximum rate at which messages can be sent on iopub before they are
+#          limited.
+#  Default: 1000
+# c.ServerApp.iopub_msg_rate_limit = 1000
+
+## The IP address the Jupyter server will listen on.
+#  Default: 'localhost'
+c.ServerApp.ip = '0.0.0.0'
+
+## Supply extra arguments that will be passed to Jinja environment.
+#  Default: {}
+# c.ServerApp.jinja_environment_options = {}
+
+## Extra variables to supply to jinja templates when rendering.
+#  Default: {}
+# c.ServerApp.jinja_template_vars = {}
+
+## Dict of Python modules to load as Jupyter server extensions.Entry values can
+#  be used to enable and disable the loading ofthe extensions. The extensions
+#  will be loaded in alphabetical order.
+#  Default: {}
+# c.ServerApp.jpserver_extensions = {}
+
+## The kernel manager class to use.
+#  Default: 'jupyter_server.services.kernels.kernelmanager.AsyncMappingKernelManager'
+# c.ServerApp.kernel_manager_class = 'jupyter_server.services.kernels.kernelmanager.AsyncMappingKernelManager'
+
+## The kernel spec manager class to use. Should be a subclass of
+#  `jupyter_client.kernelspec.KernelSpecManager`.
+#  
+#  The Api of KernelSpecManager is provisional and might change without warning
+#  between this version of Jupyter and the next stable one.
+#  Default: 'jupyter_client.kernelspec.KernelSpecManager'
+# c.ServerApp.kernel_spec_manager_class = 'jupyter_client.kernelspec.KernelSpecManager'
+
+## Preferred kernel message protocol over websocket to use (default: None). If an
+#  empty string is passed, select the legacy protocol. If None, the selected
+#  protocol will depend on what the front-end supports (usually the most recent
+#  protocol supported by the back-end and the front-end).
+#  Default: None
+# c.ServerApp.kernel_ws_protocol = None
+
+## The full path to a private key file for usage with SSL/TLS.
+#  Default: ''
+# c.ServerApp.keyfile = ''
+
+## Whether to limit the rate of IOPub messages (default: True). If True, use
+#  iopub_msg_rate_limit, iopub_data_rate_limit and/or rate_limit_window to tune
+#  the rate.
+#  Default: True
+# c.ServerApp.limit_rate = True
+
+## Hostnames to allow as local when allow_remote_access is False.
+#  
+#         Local IP addresses (such as 127.0.0.1 and ::1) are automatically accepted
+#         as local as well.
+#  Default: ['localhost']
+# c.ServerApp.local_hostnames = ['localhost']
+
+## The date format used by logging formatters for %(asctime)s
+#  See also: Application.log_datefmt
+# c.ServerApp.log_datefmt = '%Y-%m-%d %H:%M:%S'
+
+## The Logging format template
+#  See also: Application.log_format
+# c.ServerApp.log_format = '[%(name)s]%(highlevel)s %(message)s'
+
+## Set the log level by value or name.
+#  See also: Application.log_level
+# c.ServerApp.log_level = 30
+
+## The login handler class to use.
+#  Default: 'jupyter_server.auth.login.LoginHandler'
+# c.ServerApp.login_handler_class = 'jupyter_server.auth.login.LoginHandler'
+
+## The logout handler class to use.
+#  Default: 'jupyter_server.auth.logout.LogoutHandler'
+# c.ServerApp.logout_handler_class = 'jupyter_server.auth.logout.LogoutHandler'
+
+## Sets the maximum allowed size of the client request body, specified in the
+#  Content-Length request header field. If the size in a request exceeds the
+#  configured value, a malformed HTTP message is returned to the client.
+#  
+#  Note: max_body_size is applied even in streaming mode.
+#  Default: 536870912
+# c.ServerApp.max_body_size = 536870912
+
+## Gets or sets the maximum amount of memory, in bytes, that is allocated for use
+#  by the buffer manager.
+#  Default: 536870912
+# c.ServerApp.max_buffer_size = 536870912
+
+## Gets or sets a lower bound on the open file handles process resource limit.
+#  This may need to be increased if you run into an OSError: [Errno 24] Too many
+#  open files. This is not applicable when running on Windows.
+#  Default: 0
+# c.ServerApp.min_open_files_limit = 0
+
+## DEPRECATED, use root_dir.
+#  Default: ''
+# c.ServerApp.notebook_dir = ''
+
+## Whether to open in a browser after starting.
+#                          The specific browser used is platform dependent and
+#                          determined by the python standard library `webbrowser`
+#                          module, unless it is overridden using the --browser
+#                          (ServerApp.browser) configuration option.
+#  Default: False
+c.ServerApp.open_browser = False
+
+## Hashed password to use for web authentication.
+#  
+#                        To generate, type in a python/IPython shell:
+#  
+#                          from jupyter_server.auth import passwd; passwd()
+#  
+#                        The string should be of the form type:salt:hashed-
+#  password.
+#  Default: ''
+c.ServerApp.password = ''
+
+## Forces users to use a password for the Jupyter server.
+#                        This is useful in a multi user environment, for instance when
+#                        everybody in the LAN can access each other's machine through ssh.
+#  
+#                        In such a case, serving on localhost is not secure since
+#                        any user can connect to the Jupyter server via ssh.
+#  Default: False
+# c.ServerApp.password_required = False
+
+## The port the server will listen on (env: JUPYTER_PORT).
+#  Default: 0
+c.ServerApp.port = 8888
+
+## The number of additional ports to try if the specified port is not available
+#  (env: JUPYTER_PORT_RETRIES).
+#  Default: 50
+# c.ServerApp.port_retries = 50
+
+## Preferred starting directory to use for notebooks and kernels.
+#  Default: ''
+# c.ServerApp.preferred_dir = ''
+
+## DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib.
+#  Default: 'disabled'
+# c.ServerApp.pylab = 'disabled'
+
+## If True, display controls to shut down the Jupyter server, such as menu items
+#  or buttons.
+#  Default: True
+c.ServerApp.quit_button = True
+
+## (sec) Time window used to
+#          check the message and data rate limits.
+#  Default: 3
+# c.ServerApp.rate_limit_window = 3
+
+## Reraise exceptions encountered loading server extensions?
+#  Default: False
+# c.ServerApp.reraise_server_extension_failures = False
+
+## The directory to use for notebooks and kernels.
+#  Default: ''
+c.ServerApp.root_dir = '/notebooks/fidle'
+
+## The session manager class to use.
+#  Default: 'jupyter_server.services.sessions.sessionmanager.SessionManager'
+# c.ServerApp.session_manager_class = 'jupyter_server.services.sessions.sessionmanager.SessionManager'
+
+## Instead of starting the Application, dump configuration to stdout
+#  See also: Application.show_config
+# c.ServerApp.show_config = False
+
+## Instead of starting the Application, dump configuration to stdout (as JSON)
+#  See also: Application.show_config_json
+# c.ServerApp.show_config_json = False
+
+## Shut down the server after N seconds with no kernels or terminals running and
+#  no activity. This can be used together with culling idle kernels
+#  (MappingKernelManager.cull_idle_timeout) to shutdown the Jupyter server when
+#  it's not in use. This is not precisely timed: it may shut down up to a minute
+#  later. 0 (the default) disables this automatic shutdown.
+#  Default: 0
+# c.ServerApp.shutdown_no_activity_timeout = 0
+
+## The UNIX socket the Jupyter server will listen on.
+#  Default: ''
+# c.ServerApp.sock = ''
+
+## The permissions mode for UNIX socket creation (default: 0600).
+#  Default: '0600'
+# c.ServerApp.sock_mode = '0600'
+
+## Supply SSL options for the tornado HTTPServer.
+#              See the tornado docs for details.
+#  Default: {}
+# c.ServerApp.ssl_options = {}
+
+## Supply overrides for terminado. Currently only supports "shell_command".
+#  Default: {}
+# c.ServerApp.terminado_settings = {}
+
+## Set to False to disable terminals.
+#  
+#           This does *not* make the server more secure by itself.
+#           Anything the user can in a terminal, they can also do in a notebook.
+#  
+#           Terminals may also be automatically disabled if the terminado package
+#           is not available.
+#  Default: True
+# c.ServerApp.terminals_enabled = True
+
+## Token used for authenticating first-time connections to the server.
+#  
+#          The token can be read from the file referenced by JUPYTER_TOKEN_FILE or set directly
+#          with the JUPYTER_TOKEN environment variable.
+#  
+#          When no password is enabled,
+#          the default is to generate a new, random token.
+#  
+#          Setting to an empty string disables authentication altogether, which
+#  is NOT RECOMMENDED.
+#  Default: '<generated>'
+# c.ServerApp.token = '<generated>'
+
+## Supply overrides for the tornado.web.Application that the Jupyter server uses.
+#  Default: {}
+# c.ServerApp.tornado_settings = {}
+
+## Whether to trust or not X-Scheme/X-Forwarded-Proto and X-Real-Ip/X-Forwarded-
+#  For headerssent by the upstream reverse proxy. Necessary if the proxy handles
+#  SSL
+#  Default: False
+# c.ServerApp.trust_xheaders = False
+
+## Disable launching browser by redirect file
+#       For versions of notebook > 5.7.2, a security feature measure was added that
+#       prevented the authentication token used to launch the browser from being visible.
+#       This feature makes it difficult for other users on a multi-user system from
+#       running code in your Jupyter session as you.
+#       However, some environments (like Windows Subsystem for Linux (WSL) and Chromebooks),
+#       launching a browser using a redirect file can lead the browser failing to load.
+#       This is because of the difference in file structures/paths between the runtime and
+#       the browser.
+#  
+#       Disabling this setting to False will disable this behavior, allowing the browser
+#       to launch by using a URL and visible token (as before).
+#  Default: True
+# c.ServerApp.use_redirect_file = True
+
+## Specify where to open the server on startup. This is the
+#          `new` argument passed to the standard library method `webbrowser.open`.
+#          The behaviour is not guaranteed, but depends on browser support. Valid
+#          values are:
+#  
+#           - 2 opens a new tab,
+#           - 1 opens a new window,
+#           - 0 opens in an existing window.
+#  
+#          See the `webbrowser.open` documentation for details.
+#  Default: 2
+# c.ServerApp.webbrowser_open_new = 2
+
+## Set the tornado compression options for websocket connections.
+#  
+#  This value will be returned from
+#  :meth:`WebSocketHandler.get_compression_options`. None (default) will disable
+#  compression. A dict (even an empty one) will enable compression.
+#  
+#  See the tornado docs for WebSocketHandler.get_compression_options for details.
+#  Default: None
+# c.ServerApp.websocket_compression_options = None
+
+## The base URL for websockets,
+#          if it differs from the HTTP server (hint: it almost certainly doesn't).
+#  
+#          Should be in the form of an HTTP origin: ws[s]://hostname[:port]
+#  Default: ''
+# c.ServerApp.websocket_url = ''
diff --git a/docker/jupyter_notebook_config.py b/docker/jupyter_notebook_config.py
deleted file mode 100644
index 9a0403c6c71f5a198e54afc5d0b7ca6b1f9a9ed1..0000000000000000000000000000000000000000
--- a/docker/jupyter_notebook_config.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# Configuration file for jupyter-notebook.
-
-#------------------------------------------------------------------------------
-# Application(SingletonConfigurable) configuration
-#------------------------------------------------------------------------------
-
-## Set the log level by value or name.
-c.Application.log_level = 'INFO'
-
-#------------------------------------------------------------------------------
-# NotebookApp(JupyterApp) configuration
-#------------------------------------------------------------------------------
-
-## The IP address the notebook server will listen on.
-c.NotebookApp.ip = '*'
-
-# Password to access the server
-c.Notebook.password = ''
-c.Notebook.allow_password_change = False
-
-## The directory to use for notebooks and kernels.
-c.NotebookApp.notebook_dir = '/notebooks/fidle'
-
-## Whether to open in a browser after starting. The specific browser used is
-#  platform dependent and determined by the python standard library `webbrowser`
-#  module, unless it is overridden using the --browser (NotebookApp.browser)
-#  configuration option.
-c.NotebookApp.open_browser = True
-
-## The port the notebook server will listen on.
-c.Notebook.port = 8888
-
-## Allow running as root
-c.Notebook.allow_root = True
-
-## Disable the "Quit" button on the Web UI (shuts down the server)
-c.NotebookApp.quit_button = False
diff --git a/docker/requirements.txt b/docker/requirements.txt
index 39ea8510aaa5816109ba13f22e8248c28f38cf08..0118e42cdd8a5c205bc0af1b0501861e47cc6b43 100644
--- a/docker/requirements.txt
+++ b/docker/requirements.txt
@@ -5,4 +5,7 @@ Matplotlib
 Pandas
 Pandoc
 pyyaml
+torch
+torchvision
+torchaudio
 Jupyterlab