20210731のTensorFlowに関する記事は3件です。

CNNを用いた動物画像分類方法の理解

目的 犬と猫を分類を学習を実施。結果を整理してブログにまとめた。 分類については勉強ページ※1を参考にしながらtensorflowで組み上げることとした。 1.やったこと ・コンピュータのスペックを調べてweb上で学習可能なマシンかを検討した。手持ちのM1チップ内蔵Macマシンではプログラムがうまく動かないため急遽別PCを用意。以下は別PCのスペック。 OS : Windows10 Pro (64bit) CPU : Core i5-6200U 2.30GHz 2.40GHz RAM:4G Python 3.6.9 tensorflow 1.14.0 Keras 2.4.3 ・kaggle※2からデータセットをダウンロードし、画像をtrain/dog, train/cat, test/dog, test/catに分類する必要がある。kaggleの動物データは25000枚ある、この中から5,000枚を選ぶ。読み取りにはTensorflow.Keras.Preprocessingを利用。validation_sizeは0.2とし、画像を正しいリンクにコピーする。インスタンス作成時にスケールをかえて256階調から0~1にした。flow_from_directoryで画像ディレクトリと画像サイズとバッチサイズを指定。ImageDataGeneratorに、特定の範囲内で回転、シフト、ズーム、反転、およびせん断するように指示。 ・tensorflowでモデル生成用のニューラルネットワークを構築して、損失関数やソルバーなどを設定する。モデルはSequentialインスタンスを使用してレイヤーを追加。詳細は以下、 Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d (Conv2D) (None, 148, 148, 16) 448 _________________________________________________________________ max_pooling2d (MaxPooling2D) (None, 74, 74, 16) 0 _________________________________________________________________ conv2d_1 (Conv2D) (None, 72, 72, 32) 4640 _________________________________________________________________ max_pooling2d_1 (MaxPooling2 (None, 36, 36, 32) 0 _________________________________________________________________ conv2d_2 (Conv2D) (None, 34, 34, 64) 18496 _________________________________________________________________ max_pooling2d_2 (MaxPoolingP (None, 17, 17, 64) 0 _________________________________________________________________ flatten (Flatten) (None, 18496) 0 _________________________________________________________________ dense (Dense) (None, 512) 9470464 _________________________________________________________________ dense_1 (Dense) (None, 1) 513 ================================================================= Total params: 9,494,561 Trainable params: 9,494,561 Non-trainable params: 0 _________________________________________________________________ モデルは3つの主要部からなる。まずは畳み込みとプーリング層。畳み込みのconv2Dは、画像の特定の特徴を増幅するために、元の画像にフィルタを適用。max_pooling2dは、画像のサイズを縮小し、必要に必要なパラメータの数を減少。次に、配列をフラット化。512ユニットの隠れた高密度レイヤーを作成し、活性化関数としてRectified Linear Unit(relu)を使用。最後に出力層を準備。この最後の層には、単一の出力ニューロンを設定、0は猫を表し、1は犬となる様に設定。compileメソッドを使用してモデルをコンパイルしトレーニング用モデルを作成。学習にはAdamオプティマイザーを選択。損失関数はbinary_cross_entropy、2つの可能な出力を持つ分類モデルをトレーニング実施。トレーニング中の精度をメトリックとして追加。 ・トレーニングのためにfitを実行。パラメータをsteps_per_epoch=100、epochs=50、validation_steps=100とした。学習履歴配下、 Epoch 1/50 1000/1000 [==============================] - 226s 226ms/step - loss: 0.6437 - accuracy: 0.6236 - val_loss: 0.5716 - val_accuracy: 0.6960 Epoch 2/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.5886 - accuracy: 0.6841 - val_loss: 0.5108 - val_accuracy: 0.7514 Epoch 3/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.5556 - accuracy: 0.7121 - val_loss: 0.4834 - val_accuracy: 0.7620 Epoch 4/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.5300 - accuracy: 0.7314 - val_loss: 0.4521 - val_accuracy: 0.7902 Epoch 5/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.5116 - accuracy: 0.7474 - val_loss: 0.4360 - val_accuracy: 0.7972 Epoch 6/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.4930 - accuracy: 0.7588 - val_loss: 0.4888 - val_accuracy: 0.7744 Epoch 7/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.4813 - accuracy: 0.7666 - val_loss: 0.4318 - val_accuracy: 0.8106 Epoch 8/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.4683 - accuracy: 0.7804 - val_loss: 0.4001 - val_accuracy: 0.8166 Epoch 9/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.4542 - accuracy: 0.7865 - val_loss: 0.3774 - val_accuracy: 0.8332 Epoch 10/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.4393 - accuracy: 0.7944 - val_loss: 0.3738 - val_accuracy: 0.8360 Epoch 11/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.4329 - accuracy: 0.8008 - val_loss: 0.4144 - val_accuracy: 0.8206 Epoch 12/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.4197 - accuracy: 0.8060 - val_loss: 0.4067 - val_accuracy: 0.8148 Epoch 13/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.4099 - accuracy: 0.8129 - val_loss: 0.3581 - val_accuracy: 0.8380 Epoch 14/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.4018 - accuracy: 0.8156 - val_loss: 0.3773 - val_accuracy: 0.8322 Epoch 15/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.3921 - accuracy: 0.8223 - val_loss: 0.3321 - val_accuracy: 0.8552 Epoch 16/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.3820 - accuracy: 0.8279 - val_loss: 0.3314 - val_accuracy: 0.8542 Epoch 17/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.3772 - accuracy: 0.8332 - val_loss: 0.4501 - val_accuracy: 0.8074 Epoch 18/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.3676 - accuracy: 0.8364 - val_loss: 0.3479 - val_accuracy: 0.8538 Epoch 19/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.3631 - accuracy: 0.8393 - val_loss: 0.4308 - val_accuracy: 0.8106 Epoch 20/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.3550 - accuracy: 0.8434 - val_loss: 0.3415 - val_accuracy: 0.8562 Epoch 21/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.3433 - accuracy: 0.8498 - val_loss: 0.3127 - val_accuracy: 0.8708 Epoch 22/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.3439 - accuracy: 0.8495 - val_loss: 0.3135 - val_accuracy: 0.8652 Epoch 23/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.3443 - accuracy: 0.8500 - val_loss: 0.2874 - val_accuracy: 0.8744 Epoch 24/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.3294 - accuracy: 0.8566 - val_loss: 0.2989 - val_accuracy: 0.8754 Epoch 25/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.3318 - accuracy: 0.8558 - val_loss: 0.2873 - val_accuracy: 0.8768 Epoch 26/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.3208 - accuracy: 0.8605 - val_loss: 0.2982 - val_accuracy: 0.8684 Epoch 27/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.3175 - accuracy: 0.8598 - val_loss: 0.2832 - val_accuracy: 0.8752 Epoch 28/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.3141 - accuracy: 0.8640 - val_loss: 0.2959 - val_accuracy: 0.8702 Epoch 29/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.3109 - accuracy: 0.8662 - val_loss: 0.2919 - val_accuracy: 0.8706 Epoch 30/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.3089 - accuracy: 0.8676 - val_loss: 0.2779 - val_accuracy: 0.8820 Epoch 31/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.3054 - accuracy: 0.8673 - val_loss: 0.2684 - val_accuracy: 0.8844 Epoch 32/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.3014 - accuracy: 0.8694 - val_loss: 0.2590 - val_accuracy: 0.8918 Epoch 33/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.2980 - accuracy: 0.8715 - val_loss: 0.2595 - val_accuracy: 0.8938 Epoch 34/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.2915 - accuracy: 0.8751 - val_loss: 0.2918 - val_accuracy: 0.8816 Epoch 35/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.2929 - accuracy: 0.8745 - val_loss: 0.2669 - val_accuracy: 0.8918 Epoch 36/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.2972 - accuracy: 0.8715 - val_loss: 0.2463 - val_accuracy: 0.8946 Epoch 37/50 1000/1000 [==============================] - 225s 225ms/step - loss: 0.2858 - accuracy: 0.8780 - val_loss: 0.2774 - val_accuracy: 0.8816 Epoch 38/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.2846 - accuracy: 0.8775 - val_loss: 0.2439 - val_accuracy: 0.8992 Epoch 39/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.2840 - accuracy: 0.8804 - val_loss: 0.2709 - val_accuracy: 0.8900 Epoch 40/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.2813 - accuracy: 0.8791 - val_loss: 0.2945 - val_accuracy: 0.8772 Epoch 41/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.2763 - accuracy: 0.8788 - val_loss: 0.2482 - val_accuracy: 0.8974 Epoch 42/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.2755 - accuracy: 0.8849 - val_loss: 0.2374 - val_accuracy: 0.9008 Epoch 43/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.2743 - accuracy: 0.8821 - val_loss: 0.2692 - val_accuracy: 0.8900 Epoch 44/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.2722 - accuracy: 0.8816 - val_loss: 0.2255 - val_accuracy: 0.9068 Epoch 45/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.2666 - accuracy: 0.8874 - val_loss: 0.2331 - val_accuracy: 0.9044 Epoch 46/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.2706 - accuracy: 0.8855 - val_loss: 0.2569 - val_accuracy: 0.8952 Epoch 47/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.2722 - accuracy: 0.8849 - val_loss: 0.2331 - val_accuracy: 0.9028 Epoch 48/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.2622 - accuracy: 0.8880 - val_loss: 0.2300 - val_accuracy: 0.9044 Epoch 49/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.2699 - accuracy: 0.8847 - val_loss: 0.2265 - val_accuracy: 0.9090 Epoch 50/50 1000/1000 [==============================] - 224s 224ms/step - loss: 0.2626 - accuracy: 0.8887 - val_loss: 0.2762 - val_accuracy: 0.8866 plot_resultモデルを50エポックでトレーニングすると次の2つのグラフを表示される。 精度が最終的に90%に近づく様に学習できた 損失は下がり続けていることを確認でき学習がうまくいっている。 2.コード import os import random import shutil import pathlib import matplotlib.pyplot as plt import tensorflow as tf import pandas as pd import tensorflow.keras as keras from keras_preprocessing.image import ImageDataGenerator def create_training_and_validation_set(train_validation_split): cat_and_dog_images = os.listdir('./input_data') cat_images = list(filter(lambda image: 'cat' in image, cat_and_dog_images)) dog_images = list(filter(lambda image: 'dog' in image, cat_and_dog_images)) random.shuffle(cat_images) random.shuffle(dog_images) split_index = int(len(cat_images) * train_validation_split) training_cats = cat_images[:split_index] validation_cats = cat_images[split_index:] training_dogs = dog_images[:split_index] validation_dogs = dog_images[split_index:] create_folder_structure() copy_images(training_dogs, 'train/dogs') copy_images(training_cats, 'train/cats') copy_images(validation_dogs, 'validate/dogs') copy_images(validation_cats, 'validate/cats') def copy_images(source_list, destination_path): for image in source_list: shutil.copyfile(f'./input_data/{image}', f'./train/{destination_path}/{image}') def create_folder_structure(): shutil.rmtree('./train') pathlib.Path("./train/train/dogs").mkdir(parents=True, exist_ok=True) pathlib.Path("./train/train/cats").mkdir(parents=True, exist_ok=True) pathlib.Path("./train/validate/dogs").mkdir(parents=True, exist_ok=True) pathlib.Path("./train/validate/cats").mkdir(parents=True, exist_ok=True) def train_model(): train_gen = ImageDataGenerator( rescale=1. / 255, rotation_range=40, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True, fill_mode='nearest' ) train_iterator = train_gen.flow_from_directory('./train/train', target_size=(150, 150), batch_size=20, class_mode='binary') validation_gen = ImageDataGenerator(rescale=1. / 255.0) validation_iterator = validation_gen.flow_from_directory('./train/validate', target_size=(150, 150), batch_size=10, class_mode='binary') model = keras.models.Sequential([ keras.layers.Conv2D(16, (3, 3), activation=tf.nn.relu, input_shape=(150, 150, 3)), keras.layers.MaxPool2D((2, 2)), keras.layers.Conv2D(32, (3, 3), activation=tf.nn.relu), keras.layers.MaxPool2D((2, 2)), keras.layers.Conv2D(64, (3, 3), activation=tf.nn.relu), keras.layers.MaxPool2D((2, 2)), keras.layers.Flatten(), keras.layers.Dense(units=512, activation=tf.nn.relu), keras.layers.Dense(1, activation=tf.nn.sigmoid) ]) print(model.summary()) model.compile(optimizer=tf.optimizers.Adam(), loss=tf.keras.losses.binary_crossentropy, metrics=['accuracy']) history = model.fit(train_iterator, validation_data=validation_iterator, steps_per_epoch=1000, epochs=50, validation_steps=500) model.save('dogs-vs-cats.h5') return history def plot_result(history): acc = history.history['accuracy'] val_acc = history.history['val_accuracy'] epochs = range(len(acc)) plt.plot(epochs, acc, 'b', label='Training accuracy') plt.plot(epochs, val_acc, 'r', label='Validation accuracy') plt.title('Training and validation accuracy') plt.legend() plt.figure() loss = history.history['loss'] val_loss = history.history['val_loss'] plt.plot(epochs, loss, 'b', label='Training Loss') plt.plot(epochs, val_loss, 'r', label='Validation Loss') plt.title('Training and validation loss') plt.legend() plt.show() def load_and_predict(): model = keras.models.load_model('dogs-vs-cats.h5') test_generator = ImageDataGenerator(rescale=1. / 255) test_iterator = test_generator.flow_from_directory( './input_test', target_size=(150, 150), shuffle=False, class_mode='binary', batch_size=1) ids = [] for filename in test_iterator.filenames: ids.append(int(filename.split('\\')[1].split('.')[0])) predict_result = model.predict(test_iterator, steps=len(test_iterator.filenames)) predictions = [] for index, prediction in enumerate(predict_result): predictions.append([ids[index], prediction[0]]) predictions.sort() return predictions create_training_and_validation_set(0.8) result_history = train_model() plot_result(result_history) 3.まとめ 手を動かしながら学習による動物の分類の仕方について理解を深めることができた。 4.参考ページ ※1 https://goodboychan.github.io/python/deep_learning/tensorflow-keras/vision/2020/10/16/01-Image-Classification-with-Cat-and-Dog.html ※2 https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition/data
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ライブラリ追加によるdockerイメージの作成(Python, tensorflow, sklearn)

目的 前回の記事でdockerをインストールしてベーシックな機械学習環境を構築することまで行いましたが、拾ってきたdockerイメージには必要なライブラリが入っていませんでした。そこで拾ってきたdockerイメージにライブラリを追加して新しいdockerイメージを作成することを行います。 実施内容概要 元となるdockerイメージ:tensorflow/tensorflow 追加するライブラリ:ScikitLearn、Pandas、imbalanced-learn 作成するdockerイメージ:my_ml 実施環境 MacBookAir  early 2020, RAM 8GB, CPU intel core i5 (非M1) OS: macOS Big Sur Ver. 11.4 実施内容 dockerの起動 docker desktopのインストールとtensorflowのdockerイメージのダウンロードが完了していれば、以下のコマンドをterminalに入力するだけでdockerを起動できます。 -d を追加して、バックグラウンドで動作してもらうことにしました。 --name TF を追加して、コンテナの名前をTFと固定しました。 % docker run -d -it --name TF -p 8081:8888 tensorflow/tensorflow:latest-jupyter 注意 2回目以降、上記コマンドではTFはすでにあるとのエラーが出ます。この時はdocker desktopの再生ボタンを押せば良いみたいです。 CLIの起動 docker desktopのCLIと書いてあるボタンをクリックするとコマンドラインが起動します。どうやらここがdockerコンテナ上のterminal相当の場所の様です。例えば、このコマンドライン上で「Python3」と入力するとPythonが起動します。(今は起動しません) pipによるライブラリのインストール 起動したコマンドライン上で以下のコマンドを実行してライブラリをインストールします。 $ pip install scikit-learn $ pip install pandas $ pip install imbalanced-learn インストールの確認 インストール完了後、起動しているコマンドライン上で以下を入力し、Python3を起動させます。 $ Python3 その後、起動したPython3にて以下を実行してエラーが出ないことを確かめます。 >>> import pandas >>> import sklearn >>> import imbalanced-learn その後一旦起動したCLIを終了させます。(terminalを左上のバッテンマークで消しておきます。) terminalの再起動とdockerイメージ化 terminalを再度起動して、以下のコマンドを入力します。これで新たなdockerイメージの作成が完了しました!! $ docker commit TF my_ml commitの後の第一引数で起動中のコンテナを指定(今はTF) 第二引数で作成するイメージの名前をつける(今回はmy_ml) イメージの名前には大文字は使えない様です。 $ docker images と入力すれば、my_mlと記載されたイメージが追加されていることが確認できるはずです。 結果 例えば、以下のコマンドをterminal上で実行すれば、 my_mlというdockerイメージから、 MLという名前のdockerコンテナを作成できます。 そしてこれにはすでに元にしたtensorflowはもちろん、pandas、Scikit-Learnとimbalanced-learnも含まれています! $ docker run -d -it --name ML -p 8088:8888 my_ml
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macにおけるdocker構築。Pythonと機械学習に向けて。

記事の目的 Pythonによる機械学習環境として、以下の二つを実施できる環境をdocker上に構築しました。 ・データサイエンス100本ノックが実施できる環境 ・Tensorflowが使用できる環境 当方、本職はプログラマーではなく、pythonや機械学習は初学者です。本記事は他のページを参考にしまくっておりキュレーションサイトの様ですがご容赦ください。。。 実施環境 MacBookAir  early 2020, RAM 8GB, CPU intel core i5 (非M1) OS: macOS Big Sur Ver. 11.4 dockerについて dockerとは Wikiによると、「Dockerは、コンテナ仮想化を用いてアプリケーションを開発・配置・実行するためのオープンソースソフトウェアあるいはオープンプラットフォームである」とのことです。 コンテナ仮想化などの難しいキーワードがありますが、現時点では以下の目的を達成するための手段としています。 「Dockerは、パソコン(私の場合はMac)でPythonを使用して機械学習を実行するための環境」 *Pythonによらず、色々な言語の開発環境を整えられる様ですが、詳しくは分かりません・・・。 *anacondaなどPythonを使用するための環境は他にもありますが、dockerのメリットは以下の様です。 dockerのメリット 機械学習のフレームワーク用の環境を簡単に作成して、使い分けができる 例えば、TensorflowとPytorchなど機械学習用のフレームワークを動作させる環境を、docker(正確にはdockerコンテナ)上に個別に作成できます。 初心者目線ではとりあえずTensorflowを使用できる環境を簡単に作れることがメリットですが、上級者目線ではフレームワークのバージョンも含めて個別に環境構築ができるので、論文の検証などにも便利な様です。 開発環境を即座に構築し、配布できる。グループで開発する時に有効 初心者目線では、グループでアプリを作るとき、グループ内の一番詳しい人が作成してくれた環境を共有できる、といったところでしょうか。パソコン引越しの時にも役に立つはずです。近々パソコン買い替えを検討している方にも良いかと。 dockerコンテナ上で開発したアプリケーションを別の場所に移動させる際、コンテナイメージに変換することで環境をそのまま移動させることができる。(移動先の環境原因のバグを減らせる) 上のメリットと似てますね。Macからwindows、その逆も簡単にできる様です 開発環境を除去することも簡単なので、PCに不要なファイルが残ったりしない 初心者目線からこのメリットを理解するのは少々難しいのですが、要らないファイルが残らないのでパソコンがスッキリするという感じですかね・・・。 この他にもメリットはたくさんあるようです。詳しくは割愛します。 dockerのインストール 初心者にdockなんて必要?と思われるかもしれませんが、何事も試してみたい派なので、とりあえずインストールしました。参考にしたのは、以下のサイトのMacの箇所です。 Docker hubにサインイン DockerHubのサイトでユーザー登録をしておきます。 Docker Desktop on Macをインストール 以下のサイトにアクセスし、「Mac with intel chip」をクリックしてダウンロードし、 ダウンロード完了後に「docker.dmg」をダブルクリックしてインストールしました。 詳細は以下のサイトに記載してあります。 初回起動とチュートリアル 初回起動時はチュートリアルに沿って進めました。以下の画面です。 青い箇所をクリックするだけで、クローン、ビルド、ラン、シェアの順に進められます。 シェアのところで、先ほど作成したDocker hubに登録したユーザ名とパスワードを入力します。 もしかして、この初回起動時のチュートリアルは実行不要かも とりあえずdocker自体のインストールはこれで完了の様なので、次にデータサイエンス100本ノックの環境構築を行いました。 データサイエンス100本ノックが実施できる環境の構築 ここから先は以下のサイトを参考にしました。 Dockerセットアップまでは完了しているので、「Docker上で動かす」以降を実施しました。 初回起動 docker desktopが起動している状態で、以下のコマンドをteriminal上で実行します。 $ git clone https://github.com/The-Japan-DataScientist-Society/100knocks-preprocess $ cd 100knocks-preprocess $ docker-compose up -d --build 次に、safariなどのブラウザ上で以下にアクセスします。(terminalではありません!) http://localhost:8888 Jupyter Notebookが起動します。Jupyter notebook上からworkのフォルダにアクセスし、その中の「preprocess_knock_Python.ipynb」を起動すれば、データサイエンス100本ノックの環境構築完了でした! 再開 再開時は、docker desktopを起動して100knocks-preprocessをstartさせます。 そして、ブラウザから以下にアクセスすれば再開できました!簡単! http://localhost:8888 Tensorflowのライブラリが使用できる環境の構築 ここから先は以下のサイトを参考にしました。 Keras/Tensorflowのdockerイメージのダウンロード 以下のコマンドをMacのterminalに入力し、Jupyter付きの最新のtensorflowをダウンロードします。 $ docker pull tensorflow/tensorflow:latest-jupyter dockerとjupyter notebookの起動 次に以下のコマンドをterminalに入力してdockerを起動します。 $ docker run -it -p 8081:8888 tensorflow/tensorflow:latest-jupyter この時、tokenが発行されます。terminalの返答にtoken=xxxxxxxxxxxxxxxと長い文字と数字の列があると思いますので、コピーしておきます。 次に、ブラウザ上で以下にアクセスします。起動時にポート8001を指定してるので、100本ノックとは異なります。 http://localhost:8081/ ブラウザ上でtokenを聞かれますので、そして先ほどコピーしたtokenを入力してJypyter notebookが使用できるようになりました! Jypyter notebook上では右上の「New▼」をクリックしてPython3を選べば開始できました。 テスト Jypyter notebookで以下をテストで実行したところ、エラーは出なかったのでひとまず成功している様です! 入力 import tensorflow as tf print(tf.reduce_sum(tf.random.normal([1000, 1000]))) 出力 tf.Tensor(-138.44626, shape=(), dtype=float32) ライブラリ確認 普段使用しているライブラリに関して、この段階で使用可能か確認しました 入っている ・・・numpy、matplotlib 入っていない・・・Pandas、sklearn、imbalanced-learn 次のステップとしてdockerイメージにライブラリを追加していく方法を探してみます。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む