diff --git a/VAE/08-VAE-with-CelebA.ipynb b/VAE/08-VAE-with-CelebA.ipynb index 41ab4c283679e921d6e752511adadba68d5f7f01..ff32fda135c12f8baf2e0ac6e7892c32689633ec 100644 --- a/VAE/08-VAE-with-CelebA.ipynb +++ b/VAE/08-VAE-with-CelebA.ipynb @@ -37,146 +37,9 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<style>\n", - "\n", - "div.warn { \n", - " background-color: #fcf2f2;\n", - " border-color: #dFb5b4;\n", - " border-left: 5px solid #dfb5b4;\n", - " padding: 0.5em;\n", - " font-weight: bold;\n", - " font-size: 1.1em;;\n", - " }\n", - "\n", - "\n", - "\n", - "div.nota { \n", - " background-color: #DAFFDE;\n", - " border-left: 5px solid #92CC99;\n", - " padding: 0.5em;\n", - " }\n", - "\n", - "div.todo:before { content:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1My44OTEyIiBoZWlnaHQ9IjE0My4zOTAyIiB2aWV3Qm94PSIwIDAgNTMuODkxMiAxNDMuMzkwMiI+PHRpdGxlPjAwLUJvYi10b2RvPC90aXRsZT48cGF0aCBkPSJNMjMuNDU2OCwxMTQuMzAxNmExLjgwNjMsMS44MDYzLDAsMSwxLDEuODE1NywxLjgyNEExLjgyMDksMS44MjA5LDAsMCwxLDIzLjQ1NjgsMTE0LjMwMTZabS0xMC42NjEyLDEuODIyQTEuODI3MiwxLjgyNzIsMCwxLDAsMTAuOTgsMTE0LjMsMS44MiwxLjgyLDAsMCwwLDEyLjc5NTYsMTE2LjEyMzZabS03LjcwNyw0LjU4NzR2LTVzLjQ4NjMtOS4xMjIzLDguMDIxNS0xMS45Njc1YTE5LjIwODIsMTkuMjA4MiwwLDAsMSw2LjA0ODYtMS4yNDU0LDE5LjE3NzgsMTkuMTc3OCwwLDAsMSw2LjA0ODcsMS4yNDc1YzcuNTM1MSwyLjgzNDcsOC4wMTc0LDExLjk2NzQsOC4wMTc0LDExLjk2NzR2NS4wMjM0bC4wMDQyLDcuNjgydjIuNGMuMDE2Ny4xOTkyLjAzMzYuMzkyMS4wMzM2LjU4NzEsMCwuMjEzOC0uMDE2OC40MTA5LS4wMzM2LjYzMzJ2LjA1ODdoLS4wMDg0YTguMzcxOSw4LjM3MTksMCwwLDEtNy4zNzM4LDcuNjU0N3MtLjk5NTMsMy42MzgtNi42OTMzLDMuNjM4LTYuNjkzNC0zLjYzOC02LjY5MzQtMy42MzhhOC4zNyw4LjM3LDAsMCwxLTcuMzcxNi03LjY1NDdINS4wODQzdi0uMDU4N2MtLjAxODktLjIyLS4wMjk0LS40MTk0LS4wMjk0LS42MzMyLDAtLjE5MjkuMDE2Ny0uMzgzNy4wMjk0LS41ODcxdi0yLjRtMTguMDkzNy00LjA0YTEuMTU2NSwxLjE1NjUsMCwxLDAtMi4zMTI2LDAsMS4xNTY0LDEuMTU2NCwwLDEsMCwyLjMxMjYsMFptNC4wODM0LDBhMS4xNTk1LDEuMTU5NSwwLDEsMC0xLjE2MzYsMS4xN0ExLjE3NSwxLjE3NSwwLDAsMCwyNy4yNjE0LDEyNC4zNzc5Wk05LjM3MzksMTE0LjYzNWMwLDMuMTA5MywyLjQxMzIsMy4zMSwyLjQxMzIsMy4zMWExMzMuOTI0MywxMzMuOTI0MywwLDAsMCwxNC43MzQ4LDBzMi40MTExLS4xOTI5LDIuNDExMS0zLjMxYTguMDc3Myw4LjA3NzMsMCwwLDAtMi40MTExLTUuNTUxOWMtNC41LTMuNTAzMy05LjkxMjYtMy41MDMzLTE0Ljc0MTEsMEE4LjA4NTEsOC4wODUxLDAsMCwwLDkuMzczOSwxMTQuNjM1WiIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxjaXJjbGUgY3g9IjMzLjE0MzYiIGN5PSIxMjQuNTM0IiByPSIzLjgzNjMiIHN0eWxlPSJmaWxsOiMwMTAxMDEiLz48cmVjdCB4PSIzNS42NjU5IiB5PSIxMTIuOTYyNSIgd2lkdGg9IjIuMDc3IiBoZWlnaHQ9IjEwLjU0NTgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxLjYgMjQxLjExMjEpIHJvdGF0ZSgtMTU1Ljc0NikiIHN0eWxlPSJmaWxsOiMwMTAxMDEiLz48Y2lyY2xlIGN4PSIzOC44NzA0IiBjeT0iMTEzLjQyNzkiIHI9IjIuNDA4NSIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxjaXJjbGUgY3g9IjUuMjI0OCIgY3k9IjEyNC41MzQiIHI9IjMuODM2MyIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxyZWN0IHg9IjEuNDE2NCIgeT0iMTI0LjYzMDEiIHdpZHRoPSIyLjA3NyIgaGVpZ2h0PSIxMC41NDU4IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0LjkwOTcgMjU5LjgwNikgcm90YXRlKC0xODApIiBzdHlsZT0iZmlsbDojMDEwMTAxIi8+PGNpcmNsZSBjeD0iMi40MDkxIiBjeT0iMTM3LjA5OTYiIHI9IjIuNDA4NSIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxwYXRoIGQ9Ik0xOC4wNTExLDEwMC4xMDY2aC0uMDE0NlYxMDIuNjFoMi4zdi0yLjQyNzlhMi40MjI5LDIuNDIyOSwwLDEsMC0yLjI4NTQtLjA3NTVaIiBzdHlsZT0iZmlsbDojMDEwMTAxIi8+PHBhdGggZD0iTTM5LjQyMTQsMjcuMjU4djEuMDVBMTEuOTQ1MiwxMS45NDUyLDAsMCwwLDQ0LjU5NTQsNS43OWEuMjQ0OS4yNDQ5LDAsMCwxLS4wMjM1LS40MjI3TDQ2Ljc1LDMuOTUxNWEuMzg5Mi4zODkyLDAsMCwxLC40MjYyLDAsMTQuODQ0MiwxNC44NDQyLDAsMCwxLTcuNzU0MywyNy4yNTkxdjEuMDY3YS40NS40NSwwLDAsMS0uNzA0Ny4zNzU4bC0zLjg0MTktMi41MWEuNDUuNDUsMCwwLDEsMC0uNzUxNmwzLjg0MTktMi41MWEuNDUuNDUsMCwwLDEsLjY5NDYuMzc1OFpNNDMuMjMsMi41ODkyLDM5LjM4NzguMDc5NGEuNDUuNDUsMCwwLDAtLjcwNDYuMzc1OHYxLjA2N2ExNC44NDQyLDE0Ljg0NDIsMCwwLDAtNy43NTQzLDI3LjI1OTEuMzg5LjM4OSwwLDAsMCwuNDI2MSwwbDIuMTc3Ny0xLjQxOTNhLjI0NS4yNDUsMCwwLDAtLjAyMzUtLjQyMjgsMTEuOTQ1MSwxMS45NDUxLDAsMCwxLDUuMTc0LTIyLjUxNDZ2MS4wNWEuNDUuNDUsMCwwLDAsLjcwNDYuMzc1OGwzLjg1NTMtMi41MWEuNDUuNDUsMCwwLDAsMC0uNzUxNlpNMzkuMDUyMywxNC4yNDU4YTIuMTIwNiwyLjEyMDYsMCwxLDAsMi4xMjA2LDIuMTIwNmgwQTIuMTI0LDIuMTI0LDAsMCwwLDM5LjA1MjMsMTQuMjQ1OFptNi4wNzMyLTQuNzc4MS44MjU0LjgyNTVhMS4wNTY4LDEuMDU2OCwwLDAsMSwuMTE3NSwxLjM0MjFsLS44MDIsMS4xNDQyYTcuMTAxOCw3LjEwMTgsMCwwLDEsLjcxMTQsMS43MTEybDEuMzc1Ny4yNDE2YTEuMDU2OSwxLjA1NjksMCwwLDEsLjg3NTcsMS4wNHYxLjE2NDNhMS4wNTY5LDEuMDU2OSwwLDAsMS0uODc1NywxLjA0bC0xLjM3MjQuMjQxNkE3LjExLDcuMTEsMCwwLDEsNDUuMjcsMTkuOTNsLjgwMTksMS4xNDQyYTEuMDU3LDEuMDU3LDAsMCwxLS4xMTc0LDEuMzQyMmwtLjgyODguODQ4OWExLjA1NywxLjA1NywwLDAsMS0xLjM0MjEuMTE3NGwtMS4xNDQyLS44MDE5YTcuMTMzOCw3LjEzMzgsMCwwLDEtMS43MTEzLjcxMTNsLS4yNDE2LDEuMzcyNGExLjA1NjgsMS4wNTY4LDAsMCwxLTEuMDQuODc1N0gzOC40Njg0YTEuMDU2OCwxLjA1NjgsMCwwLDEtMS4wNC0uODc1N2wtLjI0MTYtMS4zNzI0YTcuMTM1NSw3LjEzNTUsMCwwLDEtMS43MTEzLS43MTEzbC0xLjE0NDEuODAxOWExLjA1NzEsMS4wNTcxLDAsMCwxLTEuMzQyMi0uMTE3NGwtLjgzNTUtLjgyNTVhMS4wNTcsMS4wNTcsMCwwLDEtLjExNzQtMS4zNDIxbC44MDE5LTEuMTQ0MmE3LjEyMSw3LjEyMSwwLDAsMS0uNzExMy0xLjcxMTJsLTEuMzcyNC0uMjQxNmExLjA1NjksMS4wNTY5LDAsMCwxLS44NzU3LTEuMDRWMTUuNzgyNmExLjA1NjksMS4wNTY5LDAsMCwxLC44NzU3LTEuMDRsMS4zNzU3LS4yNDE2YTcuMTEsNy4xMSwwLDAsMSwuNzExNC0xLjcxMTJsLS44MDItMS4xNDQyYTEuMDU3LDEuMDU3LDAsMCwxLC4xMTc1LTEuMzQyMmwuODI1NC0uODI1NEExLjA1NjgsMS4wNTY4LDAsMCwxLDM0LjMyNDUsOS4zNmwxLjE0NDIuODAxOUE3LjEzNTUsNy4xMzU1LDAsMCwxLDM3LjE4LDkuNDUxbC4yNDE2LTEuMzcyNGExLjA1NjgsMS4wNTY4LDAsMCwxLDEuMDQtLjg3NTdoMS4xNjc3YTEuMDU2OSwxLjA1NjksMCwwLDEsMS4wNC44NzU3bC4yNDE2LDEuMzcyNGE3LjEyNSw3LjEyNSwwLDAsMSwxLjcxMTIuNzExM0w0My43NjY2LDkuMzZBMS4wNTY5LDEuMDU2OSwwLDAsMSw0NS4xMjU1LDkuNDY3N1ptLTIuMDMsNi44OTg3QTQuMDQzMyw0LjA0MzMsMCwxLDAsMzkuMDUyMywyMC40MWgwQTQuMDQ2NSw0LjA0NjUsMCwwLDAsNDMuMDk1NSwxNi4zNjY0WiIgc3R5bGU9ImZpbGw6I2UxMjIyOSIvPjxwb2x5Z29uIHBvaW50cz0iMzkuNDEzIDM0Ljc1NyAzOS41MzcgMzQuNzU3IDM5LjY3NSAzNC43NTcgMzkuNjc1IDEwOS41MSAzOS41MzcgMTA5LjUxIDM5LjQxMyAxMDkuNTEgMzkuNDEzIDM0Ljc1NyAzOS40MTMgMzQuNzU3IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojOTk5O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjMwODg1NDQ1MDU2MDE2MThweDtmaWxsLXJ1bGU6ZXZlbm9kZCIvPjwvc3ZnPg==);\n", - " float:left;\n", - " margin-right:20px;\n", - " margin-top:-20px;\n", - " margin-bottom:20px;\n", - "}\n", - "div.todo{\n", - " font-weight: bold;\n", - " font-size: 1.1em;\n", - " margin-top:40px;\n", - "}\n", - "div.todo ul{\n", - " margin: 0.2em;\n", - "}\n", - "div.todo li{\n", - " margin-left:60px;\n", - " margin-top:0;\n", - " margin-bottom:0;\n", - "}\n", - "\n", - "div .comment{\n", - " font-size:0.8em;\n", - " color:#696969;\n", - "}\n", - "\n", - "\n", - "\n", - "</style>\n", - "\n" - ], - "text/plain": [ - "<IPython.core.display.HTML object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Override : Attribute [run_dir=./run/CelebA.001] with [./run/test-VAE8-3370]\n" - ] - }, - { - "data": { - "text/markdown": [ - "**FIDLE 2020 - Practical Work Module**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Version : 0.6.1 DEV\n", - "Notebook id : VAE8\n", - "Run time : Wednesday 6 January 2021, 19:47:34\n", - "TensorFlow version : 2.2.0\n", - "Keras version : 2.3.0-tf\n", - "Datasets dir : /home/pjluc/datasets/fidle\n", - "Run dir : ./run/test-VAE8-3370\n", - "Update keras cache : False\n", - "Save figs : True\n", - "Path figs : ./run/test-VAE8-3370/figs\n" - ] - }, - { - "data": { - "text/markdown": [ - "<br>**FIDLE 2021 - VAE**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Version : 1.2\n", - "TensorFlow version : 2.2.0\n", - "Keras version : 2.3.0-tf\n" - ] - }, - { - "data": { - "text/markdown": [ - "<br>**FIDLE 2020 - DataGenerator**" - ], - "text/plain": [ - "<IPython.core.display.Markdown object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Version : 0.4.1\n", - "TensorFlow version : 2.2.0\n", - "Keras version : 2.3.0-tf\n" - ] - } - ], + "outputs": [], "source": [ "import numpy as np\n", "from skimage import io\n", @@ -205,7 +68,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -231,7 +94,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -272,17 +135,9 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Train directory is : ./data/clusters-128x128\n" - ] - } - ], + "outputs": [], "source": [ "# ---- Override parameters (batch mode) - Just forget this line\n", "#\n", @@ -304,17 +159,9 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Data generator is ready with : 379 batchs of 32 images, or 12155 images\n" - ] - } - ], + "outputs": [], "source": [ "data_gen = DataGenerator(train_dir, 32, k_size=scale)\n", "\n", @@ -337,7 +184,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -370,7 +217,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -423,8 +270,8 @@ "metadata": {}, "source": [ "## Step 4 - Train\n", - "20' on a CPU \n", - "1'12 on a GPU (V100, IDRIS)" + "20' for 10 epochs on a V100 (IDRIS) \n", + "...on a basic CPU, may be >40 hours !" ] }, { diff --git a/VAE/batch_slurm.sh b/VAE/batch_slurm.sh index 35535d3757cf67a5cbc6cdf1c6ed15b72a8b7b4c..746abe707065c68472368ace8d0031434279ef51 100755 --- a/VAE/batch_slurm.sh +++ b/VAE/batch_slurm.sh @@ -46,7 +46,7 @@ export FIDLE_OVERRIDE_VAE8_run_dir="./run/CelebA.$SLURM_JOB_ID" export FIDLE_OVERRIDE_VAE8_scale="0.05" export FIDLE_OVERRIDE_VAE8_image_size="(128,128)" export FIDLE_OVERRIDE_VAE8_enhanced_dir='{datasets_dir}/celeba/enhanced' -export FIDLE_OVERRIDE_VAZ8_r_loss_factor="0.5" +export FIDLE_OVERRIDE_VAE8_r_loss_factor="0.5" # ---- By default (no need to modify) # diff --git a/fidle/pwk.py b/fidle/pwk.py index 0d2ee4a3362ce4882d1a7af9188ac2fe9cf796e0..2e1b147bb9de38533dc644eaa245438667aa0d53 100644 --- a/fidle/pwk.py +++ b/fidle/pwk.py @@ -93,7 +93,7 @@ def init(name=None, run_dir='./run'): # ---- Hello world # - display_md('**FIDLE 2020 - Practical Work Module**') + display_md('<br>**FIDLE 2020 - Practical Work Module**') print('Version :', config.VERSION) print('Notebook id :', notebook_id) print('Run time :', _start_time.strftime("%A %-d %B %Y, %H:%M:%S")) @@ -210,7 +210,11 @@ def override(*names): # setattr(main,name,new_value) overrides[name]=new_value - print(f'Override : Attribute [{name}={value_old}] with [{new_value}]') + + if len(overrides)>0: + display_md('**\*\* Overrided parameters : \*\***') + for name,value in overrides.items(): + print(f'{name:20s} : {value}') return overrides @@ -765,22 +769,27 @@ def check_finished_file(): print(f'** Finished file should be at : {config.FINISHED_FILE}\n') return False return True + - -def reset_finished_file(): - if check_finished_file()==False : return - data={} - # ---- Save it - with open(config.FINISHED_FILE,'wt') as fp: - json.dump(data,fp,indent=4) - print(f'Finished file has been reset.\n') +def reset_finished_file(verbose=False): + try: + data={} + with open(config.FINISHED_FILE,'wt') as fp: + json.dump(data,fp,indent=4) + if verbose : print(f'Finished file has been reset.\n') + except: + print(f'\n**Warning : cannot reset finished file ({config.FINISHED_FILE})\n') + return False + return True def update_finished_file(start=False, end=False): # ---- No writable finished file ? - if check_finished_file() is False : return - + if not os.access(config.FINISHED_FILE, os.W_OK): + done = reset_finished_file() + if not done : return + # ---- Load it with open(config.FINISHED_FILE) as fp: data = json.load(fp)