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

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

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

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

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

受付中

get_tensor_by_nameを使いたい。

kane_study
kane_study

総合スコア0

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

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

1回答

0評価

0クリップ

33閲覧

投稿2020/12/16 11:07

###get_tensor_by_nameに関するエラーがどうしてもエラーが取れません。

githubにあるコードを動かしたいです。
コードが古いので、そのせいかもしれません。

python

# tf.summary.FileWriter('log_dir', model.graph) # !tensorboard --logdir='log_dir/' y_pred = model.graph.get_tensor_by_name('model_1/activation_1/Softmax:0') y_logits = model.graph.get_tensor_by_name('model_1/logits/BiasAdd:0') input_img = model.graph.get_tensor_by_name('input_1:0')

エラー文
AttributeError Traceback (most recent call last)
<ipython-input-20-1bc04bf241b4> in <module>
----> 1 y_pred = model.graph.get_tensor_by_name('model/activation_1/Softmax:0')
2 y_logits = model.graph.get_tensor_by_name('model/logits/BiasAdd:0')
3 input_img = model.graph.get_tensor_by_name('input_1:0')

AttributeError: 'Model' object has no attribute 'graph'

補足
コメントアウトした部分で、TensorBoardを確認出来る様ですが、
こちらを実行すると'Model' object has no attribute 'graph'という同じエラーが出ます。
どうやらmodelに問題がありそうです。

試した事
検討違いかもしれませんが、
「get_tensor_by_name」で検索し、検索結果から
「get_tensor_by_name」の前にあるコードを真似て書き換えを行いましたが同じエラーが出ました。

環境
Anaconda、JupiterNotebook、Mac、python3.7

importしたもの
python-opencv 4.4.0.46
tensorflow 2.00
numpy 1.19.2


コードとファイル構造

直接は関係無いかと思いますが、一応載せました。

ファイル構造
killme_adversarial_example_with_TensorFlow-Keras-master
|—(下記の本コード).py
|—kill_me_images
| |—gen_adv
| |—kill_me_baby_dataset

|—models(作った)

コード
同じファイル(実行部分)のコードになります。
※上記のコードを含む

import tensorflow as tf import numpy as np import matplotlib import matplotlib.pyplot as plt %matplotlib inline import os import cv2 from PIL import Image config = tf.compat.v1.ConfigProto(gpu_options=tf.compat.v1.GPUOptions(allow_growth=True)) sess = tf.compat.v1.Session(config=config) tf.compat.v1.keras.backend.set_session(sess) root_dir = '/Users/ユーザー名/Desktop/killme_adversarial_example_with_TensorFlow-Keras-master/kill_me_images/kill_me_baby_datasets/' class_list = sorted(os.listdir(path=root_dir)) print("クラスリスト", class_list) def load_imgs(root_dir): print(class_list) num_class = len(class_list) img_paths = [] labels = [] images = [] for cl_name in class_list: img_names = os.listdir(os.path.join(root_dir, cl_name)) for img_name in img_names: img_paths.append(os.path.abspath(os.path.join(root_dir, cl_name, img_name))) hot_cl_name = get_class_one_hot(cl_name, class_list) labels.append(hot_cl_name) for img_path in img_paths: img = cv2.imread(img_path) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) images.append(img) images = np.array(images) return np.array(images), np.array(labels), class_list ############ ここから学習モデルを作成 ########### batch_size = 32 vgg16 = tf.keras.applications.VGG16(include_top=False, weights='imagenet', classes=7, input_shape=(128, 128, 3)) vgg16.trainable = False inputs = tf.keras.Input(shape=vgg16.output.shape[1:]) x = tf.keras.layers.Flatten()(inputs) x = tf.keras.layers.Dense(256, activation='relu')(x) x = tf.keras.layers.Dropout(0.5)(x) logits = tf.keras.layers.Dense(len(class_list), name='logits')(x) out = tf.keras.layers.Activation('softmax')(logits) top_model = tf.keras.Model(inputs=inputs, outputs=out) model = tf.keras.Model(inputs=vgg16.input, outputs=top_model(vgg16.output)) # 最後の畳み込み層の前までの重みの更新はしない。 # 15層目が最後の畳み込み層の開始位置 for layer in model.layers[:15]: layer.trainable = False # 学習方法を設定する model.compile(loss='categorical_crossentropy', optimizer=tf.keras.optimizers.Adam(), metrics=['accuracy']) tb_cb = tf.keras.callbacks.TensorBoard(log_dir="log_dir") ckps = [tb_cb] # 学習用データを用意する train_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255, horizontal_flip=True) train_generator = train_datagen.flow_from_directory('kill_me_images/kill_me_baby_datasets/', classes=class_list, target_size=(128, 128), batch_size=batch_size, class_mode='categorical') # 学習開始! model.fit_generator(train_generator, steps_per_epoch=train_generator.samples//batch_size, epochs=100, callbacks=ckps) model.save("models/killme_vgg16.h5") sess = tf.keras.backend.get_session() saver = tf.train.Saver() saver.save(sess, "models/killme_vgg16.ckpt") # tf.summary.FileWriter('log_dir', model.graph) # !tensorboard --logdir='log_dir/' y_pred = model.graph.get_tensor_by_name('model_1/activation_1/Softmax:0') y_logits = model.graph.get_tensor_by_name('model_1/logits/BiasAdd:0') input_img = model.graph.get_tensor_by_name('input_1:0')

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jbpb0
jbpb0

2020/12/16 11:40 編集

https://www\.tensorflow\.org/guide/migrate の最初に書いてあるように、 import tensorflow as tf ではなく import tensorflow\.compat\.v1 as tf tf\.disable_v2_behavior\(\) としたら、あちこち小細工しなくてもtf 1\.xコードが動くのではないですかね あとは、仮想環境作ってtf 1\.x入れるとか そちらの方が、1\.xコードを動かすのは確実です
kane_study
kane_study

2020/12/16 12:31

ありがとうございます。 import tensorflow as tf は以前試した時にエラーが出ました。 環境も変わったので試してみます。
jbpb0
jbpb0

2020/12/16 12:35

そうなんですか 私まだtf 1\.xしか使ってないもので、実際に2\.xで確認できないため、外してたらごめんなさい
kane_study
kane_study

2020/12/16 14:06

環境を変えた結果、import tensorflow as tfをする事ができました。 しかし、結局Modelの部分で AttributeError: 'Model' object has no attribute 'graph' が出てしまいました。
kane_study
kane_study

2020/12/16 14:06

次は1\.xで動かしてみたいと思います。
kane_study
kane_study

2020/12/17 06:34

1\.xでも失敗しました。
jbpb0
jbpb0

2020/12/17 08:24

y_pred = sess\.graph\.get_tensor_by_name\('model_1/activation_1/Softmax:0'\) y_logits = sess\.graph\.get_tensor_by_name\('model_1/logits/BiasAdd:0'\) input_img = sess\.graph\.get_tensor_by_name\('input_1:0'\) としても、一つ目と二つ目はエラーになります KeyError: "The name 'model_1/activation_1/Softmax:0' refers to a Tensor which does not exist\. The operation, 'model_1/activation_1/Softmax', does not exist in the graph\." KeyError: "The name 'model_1/logits/BiasAdd:0' refers to a Tensor which does not exist\. The operation, 'model_1/logits/BiasAdd', does not exist in the graph\." そんなの無いよって言われてますけど、名前合ってるんですか\?
kane_study
kane_study

2020/12/17 08:45

ありがとうございます。 sess\.graph\.はまだ試していませんでした。
kane_study
kane_study

2020/12/17 08:51

私も以下のエラーが出ました。 "The name 'model_1/activation_1/Softmax:0' refers to a Tensor which does not exist\. The operation, 'model_1/activation_1/Softmax', does not exist in the graph\."
kane_study
kane_study

2020/12/17 08:52

qiitaの記事を見る限りですと、 Tensorboardで確認しており、合ってる様です。 自分でも確認したいのでどうにかTensorboardを導入しようと思います。
jbpb0
jbpb0

2020/12/17 08:59

その名前はありませんでした 近い名前では、たとえば下記のはありました y_pred = sess\.graph\.get_tensor_by_name\('model/activation/Softmax:0'\) y_logits = sess\.graph\.get_tensor_by_name\('model/logits/BiasAdd:0'\) 質問者さんがほしいところと合ってるのかは分かりませんけど
jbpb0
jbpb0

2020/12/17 09:03 編集

これ実行したらmodel\.jsonというテキストファイルができて、それ調べたら名前が分かります ops = {} for op in tf\.get_default_graph\(\)\.get_operations\(\): ops\[op\.name\] = \[str\(output\) for output in op\.outputs\] import json f = open\('model\.json', 'w'\) f\.write\(json\.dumps\(ops, indent=4\)\) f\.close\(\) 3行目\(for\.\.\. の次\)は、行頭にインデントを入れてください
kane_study
kane_study

2020/12/17 10:22

ありがとうございます。 動かしましたが、テキストファイルが出てきませんでした。 使っているツールをご教授頂けないでしょうか\?
jbpb0
jbpb0

2020/12/17 10:38

質問のコードの、エラーが出る行の直前に追記して、コードを上から全部実行しただけです model\.jsonというファイルが、コードを実行したフォルダにできませんか\? 現在はtf 1\.xをお使いなんですよね\?
kane_study
kane_study

2020/12/17 15:14

ありがとうございます。 出来ました。 環境の方はpython3\.6\(tensorflow 1\.x\) とpython3\.7\(tensorflow 2\.x\)の両方でやってます。
kane_study
kane_study

2020/12/17 20:29

申し訳ございません。 以下のコードを考えついた経緯をお伺いしてもよろしいでしょうか\? 私はtensorboardしか頭になく、他の方法を思いつきもしませんでした。 単に経験不足ですかね\? ops = {} for op in tf\.get_default_graph\(\)\.get_operations\(\): ops\[op\.name\] = \[str\(output\) for output in op\.outputs\] import json f = open\('model\.json', 'w'\) f\.write\(json\.dumps\(ops, indent=4\)\) f\.close\(\)
jbpb0
jbpb0

2020/12/18 00:25

get_tensor_by_name と、それにいろいろキーワードを追加してググって出てきたいくつかのWebサイトの記述を読んで、 https://qiita\.com/iwatake2222/items/80fc73ff23d8f51650f5 の「モデル情報を確認する」に書かれているjsonファイルを作成してそこから名前を調べる方法が使えそうだと思い、その上のコードから必要最小限のところだけ抜き出しました
kane_study
kane_study

2020/12/18 11:31

ありがとうございます。 検索力の差ですね,,,
kane_study
kane_study

2020/12/18 13:32

申し訳ございません。先程、無事に全ソースコードが動きました。 しかし、やはりこの部分に問題があった様でして、 ノイズを上手く計算出来ずAdversarial Exsampleになりませんでした。 y_pred = sess\.graph\.get_tensor_by_name\('model/activation/Softmax:0'\) y_logits = sess\.graph\.get_tensor_by_name\('model/logits/BiasAdd:0'\) input_img = sess\.graph\.get_tensor_by_name\('input_1:0'\) やはり、Tensorboardを利用する必要がある様です。
jbpb0
jbpb0

2020/12/18 13:40 編集

jsonファイルを見ると分かりますけど、似たような名前のがたくさんあり、質問者さんが欲しいところがどれか分かりませんでしたので、一番名前が近そうなのを挙げたのですが、全然違う場所かもしれません そもそもの目的が分からないもので、探す手がかりも無く
jbpb0
jbpb0

2020/12/20 01:21 編集

> コメントアウトした部分で、TensorBoardを確認出来る様ですが、 そこはコメントのままで大丈夫です コードのそれよりも前に tb_cb = tf\.keras\.callbacks\.TensorBoard\(log_dir="log_dir"\) で設定されているため、log_dir には既にtensorboardに必要な情報があります anacondaプロンプト\(macならターミナル\)を起動し、pythonプログラムを実行したフォルダ\(modelsフォルダやlog_dirフォルダがあるところ\)に cd してから、 tensorboard --logdir=log_dir を実行してください しばらく待つと、「\(Press CTRL\+C to quit\)」と表示されますので、それはそのままにして、同じPCのWebブラウザにて http://localhost:6006/ にアクセスしてみてください 学習中のaccやlossの変化のグラフが表示されるはずです また、左上の「GRAPHS」をクリックしたら、ネットワークの構造が表示されます
kane_study
kane_study

2020/12/21 04:41

ありがとうございます。 どうにか出来ました。 実は以前にその方法を試したのですが、 どうやら、logdirに複数のファイルがあるせいで失敗したようです。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

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