質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1468閲覧

Google Colab上での論文の再現方法(github, python)

unser

総合スコア58

CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/10/28 04:04

編集2021/10/28 04:08

GPU環境で深層学習の論文の実装を再現したいと考えております。

しかし,そこでエラーが起きてしまったため解決方法をご教授いただけると幸いです。

試したこと

論文のgithubはこちらです:

https://github.com/christina-aigner/exploring-generalization

こちらのコードにおいて,trainを実装するのは時間の関係上後回しにし,
まずは訓練済みのモデルを用いた評価をグラフ化させることを行いたいと考えました。

そのために,local環境にこちらのgitをcloneしてgoogle drive上にuploadしました。

google driveのfileの構造としてはこのような形です。

???? drive | |- ???? MyDrive | |-???? Ronbun | |-???? 該当git | |-該当git上のさまざまなファイル                                           |                                           |-再現用のipynbの場所

行ったこととしては,

RuntimeのHardware accelerlatorをGPUにして
以下のコードを実装しました:

python

1# ここでgoogle driveと連携 2from google.colab import drive 3drive.mount('/content/drive') 4 5paper_path="/content/drive/MyDrive/Ronbun/exploring-generalization" 6 7# 念の為 moduleのimport 8import sys 9import time 10sys.path.append(paper_path) 11from src import * 12 13# 該当gitにてsrcに移動しろとあるため移動 14#/content/drive/MyDrive/Ronbun/exploring-generalization/src 15# に移動 16%cd {paper_path} 17%cd src 18

そして以下のコードを実装したところ

python

1_s=time.time() 2!python evaluate.py --savedmodels=fc 3_g=time.time() 4print(_g-_s)

以下のようなエラーが出ました,
(evaluate.pyやplot_utils.pyの中身を見る限り
notebook上に論文のgithubのplotsの図が表示されることを期待しましたが):

Traceback (most recent call last): File "evaluate.py", line 129, in <module> model, device, margin, nchannels, img_dim) File "/content/drive/My Drive/Ronbun/exploring-generalization/src/utils/eval_utils.py", line 97, in calculate_norms input_size=[1, nchannels, img_dim, img_dim]) / margin File "/content/drive/My Drive/Ronbun/exploring-generalization/src/measures/measures.py", line 88, in path_norm return (tmp_model(data_ones).sum() ** (1 / p)).item() File "/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py", line 1051, in _call_impl return forward_call(*input, **kwargs) File "/content/drive/My Drive/Ronbun/exploring-generalization/src/models/fc.py", line 17, in forward x = self.classifier(x) File "/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py", line 1051, in _call_impl return forward_call(*input, **kwargs) File "/usr/local/lib/python3.7/dist-packages/torch/nn/modules/container.py", line 139, in forward input = module(input) File "/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py", line 1051, in _call_impl return forward_call(*input, **kwargs) File "/usr/local/lib/python3.7/dist-packages/torch/nn/modules/linear.py", line 96, in forward return F.linear(input, self.weight, self.bias) File "/usr/local/lib/python3.7/dist-packages/torch/nn/functional.py", line 1847, in linear return torch._C._nn.linear(input, weight, bias) RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cpu and cuda:0! (when checking arugment for argument mat1 in method wrapper_addmm) 4.436869144439697

こちらのエラーを解消して,図を表示する方法を教えていただけると幸いです。

(あまり関係ないかもしれませんが,試したことであるため追記いたします。

試しにlocal(macOS)でこちらを実行したところ

$ python3 evaluate.py --savedmodels=fc Traceback (most recent call last): File "/Users/**/exploring-generalization/src/evaluate.py", line 142, in <module> plot_error(tr_error_list, val_error_list, x_error, xtitle, error_title) File "/Users/**/exploring-generalization/src/utils/plot_utils.py", line 23, in plot_error plt.legend([train, test]) File "/usr/local/lib/python3.9/site-packages/matplotlib/pyplot.py", line 2917, in legend return gca().legend(*args, **kwargs) File "/usr/local/lib/python3.9/site-packages/matplotlib/axes/_axes.py", line 284, in legend handles, labels, extra_args, kwargs = mlegend._parse_legend_args( File "/usr/local/lib/python3.9/site-packages/matplotlib/legend.py", line 1231, in _parse_legend_args raise TypeError("A single argument passed to legend() must be a " TypeError: A single argument passed to legend() must be a list of labels, but found an Artist in there.

とエラーが生じてしましました。)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2021/10/28 07:38

Google Colabで実行した場合は、「ランタイムのタイプ」の「ハードウェアアクセラレータ」を「GPU」にしたら、同じエラーが出ました ハードウェアアクセラレータを「None」にしたら、エラーは出ませんが、グラフが表示されず、下記が表示されました <Figure size 640x480 with 1 Axes> <Figure size 640x480 with 1 Axes> 6.150752544403076 二つの「<Figure size...」は、「*.py」ファイル中のMatplotlibでのグラフ表示が実行されたことを意味してるのだと思います おそらく、「!python...」で「*.py」ファイル中のMatplotlibでの実行をしても、その結果の図は、Google Colab上には表示されないのだと思います 三つ目の数値は「print(_g-_s)」の結果なので、実行する度に変わります
jbpb0

2021/10/28 08:02

「src/utils/plot_utils.py」の「def plot_error(...」と「def plot_normalized(...」を、 https://techacademy.jp/magazine/22285 に書かれてるようなやり方でグラフを画像ファイルに保存するように変更して、Google Colabの「ランタイムのタイプ」の「ハードウェアアクセラレータ」を「None」にして実行したら、「src」ディレクトリにグラフの画像ファイルが保存されました とりあえず、Google Colabで > 訓練済みのモデルを用いた評価をグラフ化 したいのなら、この方法で行えます
unser

2021/10/28 08:02

@jbpb0 様 ご回答いただきありがとうございます。 基本的な内容で申し訳ないのですが, 「Python 3.6, PyTorch 1.1.0 and Numpy 1.16.3」に合わせた環境はどのように作成されたかご教授いただけると幸いです。 自身の環境を変えることはなるべくしたくないので,pyenvやdockerなどだと思うのですが,おすすめ等あれば教えていただけると幸いです。
jbpb0

2021/10/28 08:15

> 「Python 3.6, PyTorch 1.1.0 and Numpy 1.16.3」に合わせた環境はどのように作成 当方はAnacondaを使ってるので、それで仮想環境を作りました conda create -n py36 python=3.6 anaconda を実行して、Python 3.6が入ってる「py36」という名前の仮想環境を作り、 conda activate py36 で有効化してから、 conda install numpy==1.16.3 conda install pytorch==1.1.0 torchvision==0.3.0 -c pytorch を実行して、インストールしました 「Python 3.6, PyTorch 1.1.0 and Numpy 1.16.3」が全部必須かどうかは、分からないです 一つずつ変えては試してないので
unser

2021/10/28 08:16

ありがとうございます。
jbpb0

2021/10/28 09:00 編集

Google Colabなら、GPUを使わないように設定したら、PythonとPyTorchとNumpyのバージョンはColabデフォルトのままでエラー出なくてグラフ作成できるのですが、Macではバージョン変えないとエラー出るのが、不思議です 【追記】 Macのエラーは、Matplotlibのバージョンが関係してるようです Google Colabで、 !pip install matplotlib==3.4.2 を実行して、MatplotlibのバージョンをColabデフォルトの3.2.2から3.4.2に上げたら、Macと同じエラーが出ました 【追記2】 Google Colabで !pip install matplotlib==3.3.4 を実行しても、Macと同じエラー出ました !pip install matplotlib==3.2.2 を実行したら、エラー出なくなりました
jbpb0

2021/10/28 09:13

Macで、下記の組み合わせでエラー出ずに実行できました Python 3.7.10 numpy 1.20.1 matplotlib 3.2.2 pytorch 1.10.0 Matplotlibのバージョンを3.3.0以降にしたら、ダメでした
guest

回答1

0

ベストアンサー

Google Colabで実行する場合は、「src/utils/plot_utils.py」の「def plot_error(...」と「def plot_normalized(...」を、下記に差し替えます
(ファイルのその部分以外は、元のまま変えない)

python

1def plot_error(data1: List, data2: List, x, xlabel, title): 2 """ 3 Plots the error functions for a given model. 4 Args: 5 data1: train error 6 data2: test error 7 x: the model names on the x axis 8 xlabel: label of the x axis 9 title: title for the plot 10 11 """ 12 fig = plt.figure() 13 plt.rcParams.update({'font.size': 16}) 14 train, = plt.plot(x, data1, marker='o', label='train') 15 test, = plt.plot(x, data2, marker='o', label='test') 16 plt.ylabel('error') 17 plt.xlabel(xlabel) 18 plt.legend([train, test]) 19 plt.legend() 20 plt.title(title) 21 #plt.show() 22 fig.savefig("plot_error.png") 23 24 25def plot_normalized(data, x, xlabel, title): 26 """ 27 Plots measures in normalized form within a range of 0 and 1. 28 Args: 29 data: 4-Tuple of calculated norms 30 x: the model names 31 xlabel: label of the x axis 32 title: title of the plot 33 34 Returns: 35 36 """ 37 fig = plt.figure() 38 plt.rcParams.update({'font.size': 16}) 39 l2, l1_path, l2_path, spectral = data 40 l2 = np.asarray(l2) 41 l2_path = np.asarray(l2_path) 42 # normalization 43 l2 = (l2 - np.min(l2)) / np.ptp(l2) 44 l2_path = (l2_path - np.min(l2_path)) / np.ptp(l2_path) 45 l1_path = (l1_path - np.min(l1_path)) / np.ptp(l1_path) 46 spectral = (spectral - np.min(spectral)) / np.ptp(spectral) 47 y_l2, = plt.plot(x, l2, marker='P', label='L2 Norm', color='r') 48 y_l1path, = plt.plot(x, l1_path, marker='s', label='L1-Path-Norm', color='b') 49 y_l2path, = plt.plot(x, l2_path, marker='D', label='L2-Path-Norm', color='m') 50 y_spectral, = plt.plot(x, spectral, marker='X', label='Spectral', color='g') 51 plt.legend([y_l2, y_l1path, y_l2path, y_spectral]) 52 plt.ylabel('error') 53 plt.xlabel(xlabel) 54 plt.title(title) 55 plt.legend() 56 #plt.show() 57 fig.savefig("plot_normalized.png")

「ランタイムのタイプ」の「ハードウェアアクセラレータ」を「None」にして実行したら、「src」ディレクトリにグラフの画像ファイルが保存されます

【追記】
Matplotlibのバージョンが3.3.0以降だと、質問のMacの場合のエラーが出ますが、3.2.2を入れたらMacでもエラー出なくなります
Google Colabは、現時点では3.2.2が入ってるのでエラー出ませんが、将来3.3.0以降に変わったら同じエラー出るようになるので、ご注意ください

投稿2021/10/28 08:08

編集2021/10/28 09:23
jbpb0

総合スコア7651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問