Tensorflowの入力パイプラインとペアになっている(すなわち、テンソルを介してネットワークの入力入力を与える)、事前に作成されたInception-V3モデルをKerasから使用します。 これは私のコードです:テンソル入力を使用するとKerasモデルの予測が変化する
my_image.jpg
は私が分類したい任意の画像である
import tensorflow as tf
from keras.preprocessing.image import load_img, img_to_array
from keras.applications.inception_v3 import InceptionV3, decode_predictions, preprocess_input
import numpy as np
img_sample_filename = 'my_image.jpg'
img = img_to_array(load_img(img_sample_filename, target_size=(299,299)))
img = preprocess_input(img)
img_tensor = tf.constant(img[None,:])
# WITH KERAS:
model = InceptionV3()
pred = model.predict(img[None,:])
pred = decode_predictions(np.asarray(pred)) #<------ correct prediction!
print(pred)
# WITH TF:
model = InceptionV3(input_tensor=img_tensor)
init = tf.global_variables_initializer()
with tf.Session() as sess:
from keras import backend as K
K.set_session(sess)
sess.run(init)
pred = sess.run([model.output], feed_dict={K.learning_phase(): 0})
pred = decode_predictions(np.asarray(pred)[0])
print(pred) #<------ wrong prediction!
。
kerasのpredict
関数を使用して予測を計算すると、結果は正しいです。しかし、イメージ配列からテンソルを作成し、そのテンソルをinput_tensor=...
経由でモデルに送り、sess.run([model.output], ...)
で予測を計算すると、結果は非常に間違っています。
異なる動作の理由は何ですか?このようにKerasネットワークを使用することはできませんか?
すべての変数を初期化する代わりに、変数のサブセットを初期化することができます(モデルの事前訓練された重みを含む)。 – abhinavkulkarni