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

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

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

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

NumPy

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

OpenCV

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

Python

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

Q&A

1回答

1978閲覧

get_tensor_by_nameを使いたい。

kane_study

総合スコア4

Matplotlib

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

NumPy

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

OpenCV

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

Python

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

0グッド

0クリップ

投稿2020/12/16 11:07

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

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

python

1# tf.summary.FileWriter('log_dir', model.graph) 2# !tensorboard --logdir='log_dir/' 3 4y_pred = model.graph.get_tensor_by_name('model_1/activation_1/Softmax:0') 5y_logits = model.graph.get_tensor_by_name('model_1/logits/BiasAdd:0') 6input_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')

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

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

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

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

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

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

2020/12/16 12:31

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

2020/12/16 12:35

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

2020/12/16 14:06

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

2020/12/16 14:06

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

2020/12/17 06:34

1.xでも失敗しました。
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

2020/12/17 08:45

ありがとうございます。 sess.graph.はまだ試していませんでした。
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

2020/12/17 08:52

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

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

2020/12/17 10:22

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

2020/12/17 10:38

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

2020/12/17 15:14

ありがとうございます。 出来ました。 環境の方はpython3.6(tensorflow 1.x) とpython3.7(tensorflow 2.x)の両方でやってます。
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

2020/12/18 00:25

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

2020/12/18 11:31

ありがとうございます。 検索力の差ですね,,,
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

2020/12/18 13:40 編集

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

2020/12/21 04:41

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

回答1

0

python

1y_pred = sess.graph.get_tensor_by_name('model_1/activation_1/Softmax:0') 2y_logits = sess.graph.get_tensor_by_name('model_1/logits/BiasAdd:0') 3input_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."
「does not exist」なので、名前が違っているのでしょう

これ実行したらmodel.jsonというテキストファイルができて、それ調べたら名前が分かります

python

1ops = {} 2for op in tf.get_default_graph().get_operations(): 3 ops[op.name] = [str(output) for output in op.outputs] 4 5import json 6f = open('model.json', 'w') 7f.write(json.dumps(ops, indent=4)) 8f.close()

その名前はありませんでした
近い名前では、たとえば下記のはありました

python

1y_pred = sess.graph.get_tensor_by_name('model/activation/Softmax:0') 2y_logits = sess.graph.get_tensor_by_name('model/logits/BiasAdd:0')

質問者さんがほしいところと合ってるのかは分かりませんけど

コメントアウトした部分で、TensorBoardを確認出来る様ですが、

そこはコメントのままで大丈夫です
コードのそれよりも前に

python

1tb_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」をクリックしたら、ネットワークの構造が表示されます

投稿2020/12/31 07:39

jbpb0

総合スコア7651

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問