2017-04-30 4 views
0

私の質問は下ですが、まず私が達成しようとしていることを説明します。バッチサイズが変更されたときのクラス得点の計算方法

私は自分のモデルで実装しようとしています。私は敵対的なイメージを作り出しています。本質的には、イプシロン値が変わったときにイメージスコアがどのように変化するかをグラフにしたいのです。

ので、次の

x = tf.placeholder(tf.float32, shape=[None, 784]) 

... 
... 

# construct model 
logits = tf.matmul(x, W) + b 
pred = tf.nn.softmax(logits) # Softmax 

...さんは私のmodelが既に訓練されており、この例では、私は次のモデルを使用していましょう、私たちが想定してみましょう私はから番号2の画像の配列を抽出しますmnistデータセット、と私は、次の変数に保存されて...

# convert into a numpy array of shape [100, 784] 
labels_of_2 = np.concatenate(labels_of_2, axis=0) 

はだから今、私が持っている例では、次のステップは、すべての画像上の異なるイプシロン値を試してみることです...

# random epsilon values from -1.0 to 1.0 
epsilon_res = 101 
eps = np.linspace(-1.0, 1.0, epsilon_res).reshape((epsilon_res, 1)) 
labels = [str(i) for i in range(10)] 

num_colors = 10 
cmap = plt.get_cmap('hsv') 
colors = [cmap(i) for i in np.linspace(0, 1, num_colors)] 


# Create an empty array for our scores 
scores = np.zeros((len(eps), 10)) 

for j in range(len(labels_of_2)): 

    # Pick the image for this iteration 
    x00 = labels_of_2[j].reshape((1, 784)) 

    # Calculate the sign of the derivative, 
    # at the image and at the desired class 
    # label 
    sign = np.sign(im_derivative[j]) 

    # Calculate the new scores for each 
    # adversarial image 
    for i in range(len(eps)): 
     x_fool = x00 + eps[i] * sign 
     scores[i, :] = logits.eval({x: x_fool, 
           keep_prob: 1.0}) 

今、私たちは今...グラフは以下のようになります。最初の画像の場合は...次使用

enter image description here

# Create a figure 
plt.figure(figsize=(10, 8)) 
plt.title("Image {}".format(j)) 

# Loop through the score functions for each 
# class label and plot them as a function of 
# epsilon 
for k in range(len(scores.T)): 
    plt.plot(eps, scores[:, k], 
      color=colors[k], 
      marker='.', 
      label=labels[k]) 

plt.legend(prop={'size':8}) 
plt.xlabel('Epsilon') 
plt.ylabel('Class Score') 
plt.grid('on') 

を画像をグラフ化することができますここに私の質問があります

私が訓練を受けたモデルこれが機能するためには

scores[i, :] = logits.eval({x: x_fool, 
           keep_prob: 1.0}) 

...その場合には次の行が動作しないであろう、100batch_sizeを用い、Iは、モデル100個のイメージの配列を渡す必要があるが、この例であろうx_foolは、サイズが(1, 784)の画像の1つです。

私は、一度に100の画像のスコアを計算する必要があるとき(私のモデルはbatch_sizeで訓練されていたので、どのクラスの画像にクラス尺度に影響を与えてグラフ化したいのですか? 100)?

答えて

1

バッチサイズを選択しないようにするには、Noneに設定します。このようにして、バッチサイズを使用することができます。

ただし、この非選択はa moderate penaltyと一致する可能性があることに注意してください。

これは、最初からやり直すと修正されます。バッチサイズが100の既存の訓練されたネットワークから開始する場合は、バッチサイズ以外の開始ネットワークと同様のテストネットワークを作成できます。バッチサイズを1に設定するか、またはNoneに設定することができます。

0

私はこの問題がbatch_sizeではなく、モデルに渡そうとしていたイメージの形式であることを認識しました。 user1735003が指摘されているので、batch_sizeは関係ありません。

イメージをモデルに渡すことができなかった理由は、それをそのまま渡していたからです...

x_fool = x00 + eps[i] * sign 
scores[i, :] = logits.eval({x: x_fool}) 

これに伴う問題は、プレースホルダがそう何をすべきかreshape画像であり、形状shape=[None, 784]の画像の配列を受け入れる必要があるのに対し、画像の形状が単純(784,)であることです。

x_fool = labels_of_2[0].reshape((1, 784)) + eps[i] * sign 
scores[i, :] = logits.eval({x:x_fool}) 

私の画像は今やプレースホルダーが受け入れることができる形状(1, 784)です。

関連する問題