From 005e808d3936176c0cc1d3b9da51bda80a6b3157 Mon Sep 17 00:00:00 2001 From: Francois Vieille Date: Sat, 16 Nov 2019 18:29:42 +0100 Subject: [PATCH] update draft notebook --- notebooks/advanced_clustering.py | 211 +++++++++++++++++ notebooks/classical_clustering.py | 5 +- notebooks/test_clustering.ipynb | 41 +--- notebooks/test_model_class.ipynb | 373 +++++++++++++++++++++--------- notebooks/test_mysql.ipynb | 30 ++- 5 files changed, 504 insertions(+), 156 deletions(-) create mode 100644 notebooks/advanced_clustering.py diff --git a/notebooks/advanced_clustering.py b/notebooks/advanced_clustering.py new file mode 100644 index 0000000..db68d95 --- /dev/null +++ b/notebooks/advanced_clustering.py @@ -0,0 +1,211 @@ +#%% [markdown] +# # Clustering classique + +#%% [markdown] +# ## import classique +import os + +#%% +%load_ext autoreload +%autoreload 2 +os.chdir('/home/jovyan/work') + +#%% [markdown] +# ## Import iss + +#%% +from iss.tools import Config +from iss.tools import Tools +from iss.models import SimpleConvAutoEncoder +from iss.clustering import ClassicalClustering +from iss.clustering import AdvancedClustering +from dotenv import find_dotenv, load_dotenv +import numpy as np + +#%% [markdown] +# ## Chargement de la config + +#%% +load_dotenv(find_dotenv()) +cfg = Config(project_dir = os.getenv("PROJECT_DIR"), mode = os.getenv("MODE")) + +#%% [markdown] +# ## Chargement du modèle + +#%% +## charger le modèle + +model_type = 'simple_conv' +cfg.get('models')[model_type]['model_name'] = 'model_colab' +model = SimpleConvAutoEncoder(cfg.get('models')[model_type]) + +#%% [markdown] +## Chargement des images + +#%% +filenames = Tools.list_directory_filenames('data/processed/models/autoencoder/train/k/') +generator_imgs = Tools.generator_np_picture_from_filenames(filenames, target_size = (27, 48), batch = 496, nb_batch = 10, scale = 1/255) + + +#%% +pictures_id, pictures_preds = Tools.encoded_pictures_from_generator(generator_imgs, model) + +#%% +intermediate_output = pictures_preds.reshape((pictures_preds.shape[0], 3*6*16)) + + +#%% +clustering = AdvancedClustering(cfg.get('clustering')['advanced'], pictures_id, intermediate_output) + + +#%% +clustering.compute_pca() + + +#%% +clustering.compute_kmeans() + +#%% +clustering.compute_kmeans_centers() + +#%% +len(clustering.kmeans_centers) + +#%% +clustering.dbscan_args = {'eps': 50, 'min_samples':1} +clustering.compute_dbscan() + +#%% +clustering.compute_dbscan_labels() + +#%% +len(clustering.final_labels) + +#%% +np.unique(clustering.final_labels, return_counts = True) + +#%%[markdown] +# # Graphiques + +#%% +def select_cluster(clustering, id_cluster): + return [os.path.join('data/processed/models/autoencoder/train/k/', res[0] + '.jpg') for res in clustering.get_zip_results() if res[2] == id_cluster] + + +#%% +for cl in np.unique(clustering.kmeans_labels): + print("Cluster %s" % (cl)) + res_tmp = select_cluster(clustering, cl) + if len(res_tmp) >= 0: + print(len(res_tmp)) + image_array = [Tools.read_np_picture(f, target_size = (54, 96)) for f in res_tmp[:100]] + img = Tools.display_mosaic(image_array, nrow = 10) + fig = plt.figure(1, figsize=(12, 7)) + plt.imshow(img, aspect = 'auto') + plt.show() + +#%% [markdown] +# ## faut essayer de faire des paquets + +#%% +from sklearn.manifold import TSNE + +output_tnse = TSNE(n_components=2).fit_transform(clustering.pca_reduction) + + +#%% +plt.scatter( + output_tnse[:,0], + output_tnse[:,1], + c = clustering.kmeans_labels +) +plt.show() + +#%% +from sklearn.cluster import KMeans + +tmp_km = KMeans(n_clusters = 15) +tmp_res = tmp_km.fit(output_tnse) + +#%% +tmp_res.labels_ + +#%% +plt.scatter( + output_tnse[:,0], + output_tnse[:,1], + c = tmp_res.labels_ +) +plt.show() + + +#%% +clustering.final_labels = tmp_res.labels_ + + + +#%% +from scipy.cluster.hierarchy import dendrogram +from sklearn.cluster import AgglomerativeClustering + +#%% +def plot_dendrogram(model, **kwargs): + + # Children of hierarchical clustering + children = model.children_ + + # Distances between each pair of children + # Since we don't have this information, we can use a uniform one for plotting + distance = np.arange(children.shape[0]) + + # The number of observations contained in each cluster level + no_of_observations = np.arange(2, children.shape[0]+2) + + # Create linkage matrix and then plot the dendrogram + linkage_matrix = np.column_stack([children, distance, no_of_observations]).astype(float) + + # Plot the corresponding dendrogram + dendrogram(linkage_matrix, **kwargs) + +#%% +cah_fit = AgglomerativeClustering(n_clusters=10) + +#%% +cah_fit = cah_fit.fit(clustering.kmeans_centers) + +#%% +fig = plt.figure(1, figsize=(12, 7)) +plot_dendrogram(cah_fit, labels = cah_fit.labels_) + +#%% +cah_fit.labels_ + +#%% +tmp = Tools.read_np_picture('data/processed/models/autoencoder/train/k/20171109-192001.jpg',target_size = (27, 48), scale = 1/255) +tmp = tmp.reshape((1,27,48,3)) +np.sum(model.get_encoded_prediction(tmp)) + +#%% +filenames = Tools.list_directory_filenames('data/processed/models/autoencoder/train/k/') +generator_imgs = Tools.generator_np_picture_from_filenames(filenames, target_size = (27, 48), batch = 10, nb_batch = 3, scale = 1/255) + +predictions_list = [] +predictions_id = [] +for imgs in generator_imgs: + predictions_id.append(imgs[0]) + predictions_list.append(model.get_encoded_prediction(imgs[1])) + +#%% +np.concatenate(tuple(predictions_list), axis = 0)[0,:,:,:] + +#%% +predictions_list[0][0,:,:,:] + +#%% +print(pictures_preds[1,:,:,:]) + + +#%% +pictures_preds.shape + +#%% diff --git a/notebooks/classical_clustering.py b/notebooks/classical_clustering.py index 607de2b..0a56c80 100644 --- a/notebooks/classical_clustering.py +++ b/notebooks/classical_clustering.py @@ -18,6 +18,7 @@ from iss.tools import Config from iss.tools import Tools from iss.models import SimpleConvAutoEncoder from iss.clustering import ClassicalClustering +from iss.clustering import AdvancedClustering from dotenv import find_dotenv, load_dotenv import numpy as np @@ -149,7 +150,3 @@ plt.scatter(clustering.pca_reduction[:, 0], clustering.pca_reduction[:, 1], c = #%% plt.scatter(clustering.pca_reduction[np.array(col) == 1, 0], clustering.pca_reduction[np.array(col) == 1, 1]) - - - -#%% diff --git a/notebooks/test_clustering.ipynb b/notebooks/test_clustering.ipynb index 7fc77c5..f125cf0 100644 --- a/notebooks/test_clustering.ipynb +++ b/notebooks/test_clustering.ipynb @@ -147,47 +147,28 @@ "cell_type": "code", "execution_count": 9, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "i_debut:0\n", - "i_fin:496\n", - "i_debut:496\n", - "i_fin:992\n" - ] - } - ], + "outputs": [], "source": [ "pictures_preds = Tools.encoded_pictures_from_generator(generator_imgs, model)" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 13, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "(992, 3, 6, 16)" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" + "ename": "AttributeError", + "evalue": "'tuple' object has no attribute 'reshape'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mintermediate_output\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpictures_preds\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m992\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;36m6\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;36m16\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m: 'tuple' object has no attribute 'reshape'" + ] } ], - "source": [ - "pictures_preds.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], "source": [ "intermediate_output = pictures_preds.reshape((992, 3*6*16))" ] diff --git a/notebooks/test_model_class.ipynb b/notebooks/test_model_class.ipynb index 06a4e91..9e802db 100644 --- a/notebooks/test_model_class.ipynb +++ b/notebooks/test_model_class.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -12,9 +12,18 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 18, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], "source": [ "%load_ext autoreload\n", "%autoreload 2" @@ -22,34 +31,33 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 110, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Using TensorFlow backend.\n" - ] - } - ], + "outputs": [], "source": [ - "from iss.tools.config import Config\n", - "from iss.models.SimpleAutoEncoder import SimpleAutoEncoder\n", + "from iss.tools import Config\n", + "from iss.tools import Tools\n", + "from iss.models import SimpleAutoEncoder\n", + "from iss.models import SimpleConvAutoEncoder\n", + "from iss.models import VarAutoEncoder\n", + "from iss.models import VarConvAutoEncoder\n", "from iss.models.ModelTrainer import ModelTrainer\n", "import pandas as pd\n", "import datetime as dt\n", "import time\n", - "import numpy as np" + "import numpy as np\n", + "from dotenv import find_dotenv, load_dotenv" ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ - "cfg = Config()" + "load_dotenv(find_dotenv())\n", + "cfg = Config(project_dir = os.getenv(\"PROJECT_DIR\"), mode = os.getenv(\"MODE\"))\n", + "model_type = 'simple_conv'" ] }, { @@ -61,16 +69,17 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 82, "metadata": {}, "outputs": [], "source": [ - "model = SimpleAutoEncoder(cfg.get('models')['simple'])" + "# model = VarAutoEncoder(cfg.get('models')[model_type])\n", + "model = SimpleConvAutoEncoder(cfg.get('models')[model_type])" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -80,27 +89,15 @@ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", - "input_1 (InputLayer) (None, 45, 80, 3) 0 \n", + "input_3 (InputLayer) (None, 27, 48, 3) 0 \n", "_________________________________________________________________\n", - "flatten_1 (Flatten) (None, 10800) 0 \n", + "encoder (Model) (None, 3, 6, 16) 25328 \n", "_________________________________________________________________\n", - "enc_1 (Dense) (None, 2000) 21602000 \n", - "_________________________________________________________________\n", - "enc_2 (Dense) (None, 100) 200100 \n", - "_________________________________________________________________\n", - "enc_3 (Dense) (None, 30) 3030 \n", - "_________________________________________________________________\n", - "dec_1 (Dense) (None, 100) 3100 \n", - "_________________________________________________________________\n", - "dec_2 (Dense) (None, 2000) 202000 \n", - "_________________________________________________________________\n", - "dense_1 (Dense) (None, 10800) 21610800 \n", - "_________________________________________________________________\n", - "reshape_1 (Reshape) (None, 45, 80, 3) 0 \n", + "decoder (Model) (None, 27, 48, 3) 13468463 \n", "=================================================================\n", - "Total params: 43,621,030\n", - "Trainable params: 43,621,030\n", - "Non-trainable params: 0\n", + "Total params: 13,493,791\n", + "Trainable params: 13,493,337\n", + "Non-trainable params: 454\n", "_________________________________________________________________\n" ] } @@ -111,7 +108,56 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "input_3 (InputLayer) (None, 27, 48, 3) 0 \n", + "_________________________________________________________________\n", + "enc_conv_1 (Conv2D) (None, 27, 48, 64) 1792 \n", + "_________________________________________________________________\n", + "batch_normalization_8 (Batch (None, 27, 48, 64) 256 \n", + "_________________________________________________________________\n", + "activation_7 (Activation) (None, 27, 48, 64) 0 \n", + "_________________________________________________________________\n", + "max_pooling2d_4 (MaxPooling2 (None, 13, 24, 64) 0 \n", + "_________________________________________________________________\n", + "enc_conv_2 (Conv2D) (None, 13, 24, 32) 18464 \n", + "_________________________________________________________________\n", + "batch_normalization_9 (Batch (None, 13, 24, 32) 128 \n", + "_________________________________________________________________\n", + "activation_8 (Activation) (None, 13, 24, 32) 0 \n", + "_________________________________________________________________\n", + "max_pooling2d_5 (MaxPooling2 (None, 6, 12, 32) 0 \n", + "_________________________________________________________________\n", + "enc_conv_3 (Conv2D) (None, 6, 12, 16) 4624 \n", + "_________________________________________________________________\n", + "batch_normalization_10 (Batc (None, 6, 12, 16) 64 \n", + "_________________________________________________________________\n", + "activation_9 (Activation) (None, 6, 12, 16) 0 \n", + "_________________________________________________________________\n", + "max_pooling2d_6 (MaxPooling2 (None, 3, 6, 16) 0 \n", + "=================================================================\n", + "Total params: 25,328\n", + "Trainable params: 25,104\n", + "Non-trainable params: 224\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "model.encoder_model.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -127,7 +173,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -136,7 +182,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -152,7 +198,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 67, "metadata": {}, "outputs": [], "source": [ @@ -161,7 +207,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 72, "metadata": {}, "outputs": [ { @@ -174,7 +220,52 @@ } ], "source": [ - "data_loader = ImageDataGeneratorWrapper(cfg)" + "data_loader = ImageDataGeneratorWrapper(cfg, model = model_type)" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10911744" + ] + }, + "execution_count": 114, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(9472, 3, 6, 16)" + ] + }, + "execution_count": 115, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "preds.shape" ] }, { @@ -186,32 +277,55 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ - "trainer = ModelTrainer(model, data_loader, cfg.get('models')['simple'])" + "trainer2 = ModelTrainer(model, data_loader, cfg.get('models')[model_type], callbacks=[])" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " ,\n", + " ]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "trainer2.callbacks" + ] + }, + { + "cell_type": "code", + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Epoch 1/2\n", - "10/10 [==============================] - 30s 3s/step - loss: 4.0362 - val_loss: 3.8519\n", + "2.2.4\n", + "Epoch 1/3\n", + "20/20 [==============================] - 66s 3s/step - loss: 0.5066 - val_loss: 0.6479\n", "ok\n" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -219,9 +333,9 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFAAAAAtCAIAAAC2z3vlAAAAIUlEQVR4nO3BMQEAAADCoPVP7WMMoAAAAAAAAAAAAADgBipdAAErWIFjAAAAAElFTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -231,16 +345,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Epoch 2/2\n", - "10/10 [==============================] - 20s 2s/step - loss: 3.9729 - val_loss: 3.9454\n", + "Epoch 2/3\n", + "20/20 [==============================] - 48s 2s/step - loss: 0.4333 - val_loss: 0.5987\n", "ok\n" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -248,9 +362,38 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFAAAAAtCAIAAAC2z3vlAAAAIUlEQVR4nO3BMQEAAADCoPVP7WMMoAAAAAAAAAAAAADgBipdAAErWIFjAAAAAElFTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ - "" + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 3/3\n", + "20/20 [==============================] - 48s 2s/step - loss: 0.4231 - val_loss: 0.4515\n", + "ok\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" ] }, "metadata": {}, @@ -258,19 +401,19 @@ } ], "source": [ - "trainer.train()" + "trainer2.train()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Prediction" + "### Prediction" ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -302,9 +445,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "execution_count": 35, @@ -323,9 +466,9 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFAAAAAtCAIAAAC2z3vlAAAAIUlEQVR4nO3BMQEAAADCoPVP7WMMoAAAAAAAAAAAAADgBipdAAErWIFjAAAAAElFTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "execution_count": 36, @@ -339,69 +482,69 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[[[ 9.29346570e-05, 8.98255530e-05, 9.10840463e-05],\n", - " [ 9.24957130e-05, 8.69057039e-05, 9.48583547e-05],\n", - " [ 9.25923814e-05, 9.37460136e-05, 9.16876670e-05],\n", - " ..., \n", - " [ 9.72924754e-05, 9.01218809e-05, 9.07215144e-05],\n", - " [ 8.95589183e-05, 9.17836296e-05, 9.02524989e-05],\n", - " [ 9.32235635e-05, 9.47016451e-05, 9.11756142e-05]],\n", - "\n", - " [[ 9.44539206e-05, 9.08145885e-05, 9.35679709e-05],\n", - " [ 9.06047280e-05, 8.93754986e-05, 9.36847937e-05],\n", - " [ 9.12203177e-05, 9.15631317e-05, 9.22772961e-05],\n", - " ..., \n", - " [ 9.03476830e-05, 9.41506369e-05, 9.19400118e-05],\n", - " [ 9.54698262e-05, 9.56243603e-05, 9.01497115e-05],\n", - " [ 9.08325746e-05, 9.22526378e-05, 9.67690648e-05]],\n", - "\n", - " [[ 9.75354778e-05, 9.62107879e-05, 9.33410265e-05],\n", - " [ 9.07929862e-05, 9.04788467e-05, 9.17322686e-05],\n", - " [ 9.03079417e-05, 9.44491185e-05, 9.32097464e-05],\n", - " ..., \n", - " [ 9.64030842e-05, 9.21978717e-05, 9.25744753e-05],\n", - " [ 9.29698217e-05, 9.10726303e-05, 9.48995221e-05],\n", - " [ 9.55267460e-05, 9.14257762e-05, 9.13872645e-05]],\n", - "\n", + "array([[[ 2. , 2. , 2. ],\n", + " [ 2. , 2. , 2. ],\n", + " [ 2. , 2. , 2. ],\n", " ..., \n", - " [[ 9.43425621e-05, 8.91427480e-05, 9.57405864e-05],\n", - " [ 9.73207134e-05, 9.43527630e-05, 9.58818273e-05],\n", - " [ 9.58043602e-05, 9.36572978e-05, 8.99789084e-05],\n", - " ..., \n", - " [ 9.33905685e-05, 9.14029151e-05, 9.26123321e-05],\n", - " [ 9.01690219e-05, 9.53693379e-05, 9.11882526e-05],\n", - " [ 9.13038821e-05, 8.71358206e-05, 9.15639248e-05]],\n", + " [ 23. , 23. , 23. ],\n", + " [ 27.00000191, 21. , 21. ],\n", + " [ 76. , 71. , 75. ]],\n", "\n", - " [[ 9.18796868e-05, 9.30848983e-05, 9.20263992e-05],\n", - " [ 8.88295326e-05, 9.11370516e-05, 9.00926607e-05],\n", - " [ 9.69637622e-05, 8.97215723e-05, 9.01956664e-05],\n", - " ..., \n", - " [ 9.22475519e-05, 9.00504892e-05, 9.20245875e-05],\n", - " [ 8.98239523e-05, 9.11542447e-05, 9.47700828e-05],\n", - " [ 9.55717333e-05, 9.17145953e-05, 9.02576721e-05]],\n", + " [[ 2. , 2. , 2. ],\n", + " [ 2. , 2. , 2. ],\n", + " [ 2. , 2. , 2. ],\n", + " ..., \n", + " [ 65. , 59.00000381, 59.00000381],\n", + " [ 72. , 67. , 71. ],\n", + " [ 91. , 89. , 92. ]],\n", "\n", - " [[ 9.10112358e-05, 9.42766128e-05, 8.98375292e-05],\n", - " [ 9.17554207e-05, 9.20126913e-05, 9.06156056e-05],\n", - " [ 9.30430760e-05, 9.51249895e-05, 9.26310167e-05],\n", - " ..., \n", - " [ 9.62113336e-05, 9.31859176e-05, 9.16533099e-05],\n", - " [ 9.47599619e-05, 9.40426253e-05, 9.60465622e-05],\n", - " [ 8.99810038e-05, 9.24791093e-05, 9.42508268e-05]]]], dtype=float32)" + " [[ 2. , 2. , 2. ],\n", + " [ 3.00000024, 3.00000024, 3.00000024],\n", + " [ 2. , 2. , 2. ],\n", + " ..., \n", + " [ 74. , 64. , 65. ],\n", + " [ 66. , 56.00000381, 57.00000381],\n", + " [ 63.00000381, 58.00000381, 55.00000381]],\n", + "\n", + " ..., \n", + " [[ 251.00001526, 254.00001526, 255. ],\n", + " [ 248.00001526, 251.00001526, 255. ],\n", + " [ 248.00001526, 249.00001526, 253.00001526],\n", + " ..., \n", + " [ 216.00001526, 228.00001526, 244.00001526],\n", + " [ 199.00001526, 215.00001526, 228.00001526],\n", + " [ 161. , 179. , 199.00001526]],\n", + "\n", + " [[ 250.00001526, 255. , 255. ],\n", + " [ 230.00001526, 239.00001526, 248.00001526],\n", + " [ 243.00001526, 251.00001526, 254.00001526],\n", + " ..., \n", + " [ 160. , 174. , 187. ],\n", + " [ 154. , 166. , 180. ],\n", + " [ 217.00001526, 231.00001526, 244.00001526]],\n", + "\n", + " [[ 247.00001526, 255. , 255. ],\n", + " [ 247.00001526, 255. , 255. ],\n", + " [ 236.00001526, 243.00001526, 251.00001526],\n", + " ..., \n", + " [ 132. , 148. , 171. ],\n", + " [ 182. , 198.00001526, 213.00001526],\n", + " [ 203.00001526, 210.00001526, 220.00001526]]], dtype=float32)" ] }, - "execution_count": 37, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "prediction" + "sample*255" ] }, { diff --git a/notebooks/test_mysql.ipynb b/notebooks/test_mysql.ipynb index 0c77cb9..aaa9b66 100644 --- a/notebooks/test_mysql.ipynb +++ b/notebooks/test_mysql.ipynb @@ -31,17 +31,21 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: MySQL-connector-python in /opt/conda/lib/python3.6/site-packages (8.0.15)\n", - "Requirement already satisfied: protobuf>=3.0.0 in /opt/conda/lib/python3.6/site-packages (from MySQL-connector-python) (3.6.1)\n", + "Collecting MySQL-connector-python\n", + "\u001b[?25l Downloading https://files.pythonhosted.org/packages/f7/59/c2220c52d747da492f2aed108cdf99b640b88cf89dbbe2ea13a8c04201aa/mysql_connector_python-8.0.18-cp36-cp36m-manylinux1_x86_64.whl (16.1MB)\n", + "\u001b[K 100% |████████████████████████████████| 16.1MB 4.1MB/s \n", + "\u001b[?25hRequirement already satisfied: protobuf>=3.0.0 in /opt/conda/lib/python3.6/site-packages (from MySQL-connector-python) (3.6.1)\n", "Requirement already satisfied: six>=1.9 in /opt/conda/lib/python3.6/site-packages (from protobuf>=3.0.0->MySQL-connector-python) (1.12.0)\n", - "Requirement already satisfied: setuptools in /opt/conda/lib/python3.6/site-packages (from protobuf>=3.0.0->MySQL-connector-python) (40.8.0)\n" + "Requirement already satisfied: setuptools in /opt/conda/lib/python3.6/site-packages (from protobuf>=3.0.0->MySQL-connector-python) (40.8.0)\n", + "Installing collected packages: MySQL-connector-python\n", + "Successfully installed MySQL-connector-python-8.0.18\n" ] } ], @@ -51,7 +55,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -66,9 +70,21 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "TypeError", + "evalue": "__init__() missing 2 required positional arguments: 'project_dir' and 'mode'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mcfg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mConfig\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m: __init__() missing 2 required positional arguments: 'project_dir' and 'mode'" + ] + } + ], "source": [ "cfg = Config()" ]