-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcode_distances.py
338 lines (288 loc) · 45.6 KB
/
code_distances.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.preprocessing import image
from PIL import Image
base_model = tf.keras.applications.VGG19(include_top=False, weights='imagenet')
target_layer="block5_conv4"
target_index=4
steps=100
step_size=0.1
# Take the network and cut it off at the layer we want to analyze,
# i.e. we only need the part from the input to the target_layer.
target = [base_model.get_layer(target_layer).output]
part_model = tf.keras.Model(inputs=base_model.input, outputs=target)
model_vgg19_cutoff = part_model
# The next part is the function to maximize the target layer/node by
# adjusting the input, equivalent to the usual gradient descent but
# gradient ascent. Run an optimization loop:
activation = None
@tf.function(
# Decorator to increase the speed of the gradient_ascent function
input_signature=(
tf.TensorSpec(shape=[None,None,3], dtype=tf.float32),
tf.TensorSpec(shape=[], dtype=tf.int32),
tf.TensorSpec(shape=[], dtype=tf.float32),)
)
def gradient_ascent(img, steps, step_size):
loss = tf.constant(0.0)
for n in tf.range(steps):
# As in normal NN training, you want to record the computation
# of the forward-pass (the part_model call below) to compute the
# gradient afterwards. This is what tf.GradientTape does.
with tf.GradientTape() as tape:
tape.watch(img)
# Forward-pass (compute the activation given our image)
activation = part_model(tf.expand_dims(img, axis=0))
print(activation)
print(np.shape(activation))
# The activation will be of shape (1,N,N,L) where N is related to
# the resolution of the input image (assuming our target layer is
# a convolutional filter), and L is the size of the layer. E.g. for a
# 256x256 image in "block4_conv1" of VGG19, this will be
# (1,32,32,512) -- we select one of the 512 nodes (index) and
# average over the rest (you can average selectively to affect
# only part of the image but there's not really a point):
loss = tf.math.reduce_mean(activation[:,:,:,target_index])
# Get the gradient, i.e. derivative of "loss" with respect to input
# and normalize.
gradients = tape.gradient(loss, img)
gradients /= tf.math.reduce_std(gradients)
# In the final step move the image in the direction of the gradient to
# increate the "loss" (our targeted activation). Note that the sign here
# is opposite to the typical gradient descent (our "loss" is the target
# activation which we maximize, not something we minimize).
img = img + gradients*step_size
img = tf.clip_by_value(img, -1, 1)
return loss, img
# Preprocessing of the image (converts from [0..255] to [-1..1]
starting_img = np.random.randint(low=0,high=255,size=(224,224,3), dtype=np.uint8)
img = tf.keras.applications.vgg19.preprocess_input(starting_img)
img = tf.convert_to_tensor(img)
# Run the gradient ascent loop
loss, img_10 = gradient_ascent(img, tf.constant(10), tf.constant(step_size))
loss, img = gradient_ascent(img, tf.constant(steps), tf.constant(step_size))
# Convert back to [0..255] and return the new image
img = tf.cast(255*(img + 1.0)/2.0, tf.uint8)
img_10 = tf.cast(255*(img_10 + 1.0)/2.0, tf.uint8)
im = Image.fromarray(np.array(img))
im.save("node4_100.png")
im = Image.fromarray(np.array(img_10))
im.save("node4_10.png")
# Investigation
x = tf.keras.applications.vgg19.preprocess_input(np.expand_dims(img, axis=0))
activations = model_vgg19_cutoff.predict(x)
plt.plot(np.mean(np.mean(np.mean(activations, axis=0), axis=0), axis=0))
plt.savefig("activations.png")
def plot_activations(img_path, ax=None):
if ax==None:
fig, ax = plt.subplots()
x = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(x)
x = np.expand_dims(x, axis=0)
x = tf.keras.applications.vgg19.preprocess_input(x)
activations = model_vgg19_cutoff.predict(x)
av_activations = np.mean(np.mean(np.mean(activations, axis=0), axis=0), axis=0)
ax.plot(av_activations)
ax.scatter(4, av_activations[4])
ax.set_xlabel("block5_conv4 index")
ax.set_ylabel("Activation value")
return ax
fig, axs = plt.subplots(nrows=3)
fig.suptitle(" n02105056: groenendael")
plot_activations("/data/nfs/ILSVRC2012_img_train/n02105056_10005.JPEG", ax=axs[0])
plot_activations("/data/nfs/ILSVRC2012_img_train/n02105056_10013.JPEG", ax=axs[1])
plot_activations("/data/nfs/ILSVRC2012_img_train/n02105056_10020.JPEG", ax=axs[2])
plt.savefig("groenendael.png", dpi=600)
plt.close()
# Distances
# 10 randomly selected categories, 100 random images each
# for i in n02096437 n02917067 n04465501 n04125021 n02892767 n03594734 n03196217 n03485794 n02088364 n03223299; do echo -- >> alistlist; echo $i; cat /data/nfs/ILSVRC2012_img_train/filelist | grep $i | sort -R | head -n 100 >> alistlist; done
categories = {
"n02096437": {"images": ["n02096437_724.JPEG", "n02096437_1102.JPEG", "n02096437_1650.JPEG", "n02096437_2087.JPEG", "n02096437_1584.JPEG", "n02096437_3848.JPEG", "n02096437_2633.JPEG", "n02096437_3352.JPEG", "n02096437_4787.JPEG", "n02096437_5011.JPEG", "n02096437_1566.JPEG", "n02096437_3724.JPEG", "n02096437_1267.JPEG", "n02096437_1278.JPEG", "n02096437_972.JPEG", "n02096437_2267.JPEG", "n02096437_2425.JPEG", "n02096437_10523.JPEG", "n02096437_1544.JPEG", "n02096437_1143.JPEG", "n02096437_9930.JPEG", "n02096437_937.JPEG", "n02096437_4088.JPEG", "n02096437_1006.JPEG", "n02096437_10584.JPEG", "n02096437_6991.JPEG", "n02096437_3847.JPEG", "n02096437_1615.JPEG", "n02096437_730.JPEG", "n02096437_930.JPEG", "n02096437_96.JPEG", "n02096437_10472.JPEG", "n02096437_6683.JPEG", "n02096437_8732.JPEG", "n02096437_764.JPEG", "n02096437_5159.JPEG", "n02096437_2920.JPEG", "n02096437_2137.JPEG", "n02096437_4577.JPEG", "n02096437_3695.JPEG", "n02096437_278.JPEG", "n02096437_7675.JPEG", "n02096437_6785.JPEG", "n02096437_3754.JPEG", "n02096437_5218.JPEG", "n02096437_1782.JPEG", "n02096437_6602.JPEG", "n02096437_1012.JPEG", "n02096437_10566.JPEG", "n02096437_6568.JPEG", "n02096437_46.JPEG", "n02096437_1936.JPEG", "n02096437_3817.JPEG", "n02096437_6095.JPEG", "n02096437_4993.JPEG", "n02096437_345.JPEG", "n02096437_1424.JPEG", "n02096437_3324.JPEG", "n02096437_514.JPEG", "n02096437_311.JPEG", "n02096437_956.JPEG", "n02096437_6689.JPEG", "n02096437_7575.JPEG", "n02096437_4147.JPEG", "n02096437_4272.JPEG", "n02096437_1830.JPEG", "n02096437_4836.JPEG", "n02096437_3873.JPEG", "n02096437_1781.JPEG", "n02096437_4672.JPEG", "n02096437_2909.JPEG", "n02096437_352.JPEG", "n02096437_4494.JPEG", "n02096437_1857.JPEG", "n02096437_2367.JPEG", "n02096437_578.JPEG", "n02096437_6268.JPEG", "n02096437_3319.JPEG", "n02096437_3776.JPEG", "n02096437_6006.JPEG", "n02096437_11272.JPEG", "n02096437_6638.JPEG", "n02096437_2049.JPEG", "n02096437_6780.JPEG", "n02096437_6791.JPEG", "n02096437_1133.JPEG", "n02096437_2067.JPEG", "n02096437_1641.JPEG", "n02096437_9963.JPEG", "n02096437_74.JPEG", "n02096437_1015.JPEG", "n02096437_6706.JPEG", "n02096437_3170.JPEG", "n02096437_949.JPEG", "n02096437_5391.JPEG", "n02096437_2713.JPEG", "n02096437_1693.JPEG", "n02096437_920.JPEG", "n02096437_1381.JPEG", "n02096437_4517.JPEG"]},
"n02917067": {"images": ["n02917067_2388.JPEG", "n02917067_4966.JPEG", "n02917067_3055.JPEG", "n02917067_3773.JPEG", "n02917067_27784.JPEG", "n02917067_4962.JPEG", "n02917067_2354.JPEG", "n02917067_11731.JPEG", "n02917067_18472.JPEG", "n02917067_7337.JPEG", "n02917067_4542.JPEG", "n02917067_21379.JPEG", "n02917067_33911.JPEG", "n02917067_18237.JPEG", "n02917067_18371.JPEG", "n02917067_4599.JPEG", "n02917067_10652.JPEG", "n02917067_11849.JPEG", "n02917067_30177.JPEG", "n02917067_12669.JPEG", "n02917067_8080.JPEG", "n02917067_16428.JPEG", "n02917067_15353.JPEG", "n02917067_10395.JPEG", "n02917067_8426.JPEG", "n02917067_15735.JPEG", "n02917067_4219.JPEG", "n02917067_31190.JPEG", "n02917067_13713.JPEG", "n02917067_4649.JPEG", "n02917067_6587.JPEG", "n02917067_9151.JPEG", "n02917067_21875.JPEG", "n02917067_17485.JPEG", "n02917067_22421.JPEG", "n02917067_15530.JPEG", "n02917067_2750.JPEG", "n02917067_18391.JPEG", "n02917067_24911.JPEG", "n02917067_15925.JPEG", "n02917067_8354.JPEG", "n02917067_14812.JPEG", "n02917067_9430.JPEG", "n02917067_6249.JPEG", "n02917067_3607.JPEG", "n02917067_22725.JPEG", "n02917067_13051.JPEG", "n02917067_6622.JPEG", "n02917067_6880.JPEG", "n02917067_7354.JPEG", "n02917067_1521.JPEG", "n02917067_15724.JPEG", "n02917067_15673.JPEG", "n02917067_22428.JPEG", "n02917067_5633.JPEG", "n02917067_18354.JPEG", "n02917067_5584.JPEG", "n02917067_1571.JPEG", "n02917067_9178.JPEG", "n02917067_9548.JPEG", "n02917067_13032.JPEG", "n02917067_7566.JPEG", "n02917067_5068.JPEG", "n02917067_16929.JPEG", "n02917067_2936.JPEG", "n02917067_9887.JPEG", "n02917067_16466.JPEG", "n02917067_5800.JPEG", "n02917067_1934.JPEG", "n02917067_2240.JPEG", "n02917067_3950.JPEG", "n02917067_513.JPEG", "n02917067_137.JPEG", "n02917067_26876.JPEG", "n02917067_18319.JPEG", "n02917067_12558.JPEG", "n02917067_329.JPEG", "n02917067_10925.JPEG", "n02917067_11054.JPEG", "n02917067_10162.JPEG", "n02917067_22324.JPEG", "n02917067_5222.JPEG", "n02917067_2246.JPEG", "n02917067_26549.JPEG", "n02917067_14332.JPEG", "n02917067_17912.JPEG", "n02917067_8425.JPEG", "n02917067_4872.JPEG", "n02917067_7903.JPEG", "n02917067_12955.JPEG", "n02917067_5456.JPEG", "n02917067_3975.JPEG", "n02917067_11301.JPEG", "n02917067_2776.JPEG", "n02917067_12716.JPEG", "n02917067_21706.JPEG", "n02917067_6007.JPEG", "n02917067_16047.JPEG", "n02917067_2091.JPEG", "n02917067_7239.JPEG"]},
"n04465501": {"images": ["n04465501_2567.JPEG", "n04465501_3307.JPEG", "n04465501_1174.JPEG", "n04465501_1105.JPEG", "n04465501_8245.JPEG", "n04465501_7737.JPEG", "n04465501_4427.JPEG", "n04465501_5015.JPEG", "n04465501_4219.JPEG", "n04465501_1265.JPEG", "n04465501_14464.JPEG", "n04465501_1453.JPEG", "n04465501_4163.JPEG", "n04465501_4400.JPEG", "n04465501_4826.JPEG", "n04465501_2138.JPEG", "n04465501_7881.JPEG", "n04465501_1324.JPEG", "n04465501_13818.JPEG", "n04465501_1944.JPEG", "n04465501_11503.JPEG", "n04465501_4106.JPEG", "n04465501_4828.JPEG", "n04465501_1095.JPEG", "n04465501_8504.JPEG", "n04465501_2523.JPEG", "n04465501_10140.JPEG", "n04465501_3064.JPEG", "n04465501_2940.JPEG", "n04465501_11218.JPEG", "n04465501_983.JPEG", "n04465501_11738.JPEG", "n04465501_2279.JPEG", "n04465501_3645.JPEG", "n04465501_2261.JPEG", "n04465501_9842.JPEG", "n04465501_4130.JPEG", "n04465501_7590.JPEG", "n04465501_9705.JPEG", "n04465501_11023.JPEG", "n04465501_7453.JPEG", "n04465501_11148.JPEG", "n04465501_6355.JPEG", "n04465501_1698.JPEG", "n04465501_423.JPEG", "n04465501_3630.JPEG", "n04465501_4550.JPEG", "n04465501_8784.JPEG", "n04465501_9329.JPEG", "n04465501_11573.JPEG", "n04465501_1781.JPEG", "n04465501_2075.JPEG", "n04465501_8555.JPEG", "n04465501_3796.JPEG", "n04465501_2732.JPEG", "n04465501_12463.JPEG", "n04465501_3214.JPEG", "n04465501_10865.JPEG", "n04465501_11299.JPEG", "n04465501_2564.JPEG", "n04465501_7681.JPEG", "n04465501_8390.JPEG", "n04465501_2405.JPEG", "n04465501_1768.JPEG", "n04465501_5593.JPEG", "n04465501_1085.JPEG", "n04465501_235.JPEG", "n04465501_5829.JPEG", "n04465501_1997.JPEG", "n04465501_10525.JPEG", "n04465501_10734.JPEG", "n04465501_1018.JPEG", "n04465501_2522.JPEG", "n04465501_396.JPEG", "n04465501_1836.JPEG", "n04465501_3661.JPEG", "n04465501_1021.JPEG", "n04465501_488.JPEG", "n04465501_13521.JPEG", "n04465501_2627.JPEG", "n04465501_276.JPEG", "n04465501_4841.JPEG", "n04465501_1392.JPEG", "n04465501_237.JPEG", "n04465501_8704.JPEG", "n04465501_2677.JPEG", "n04465501_9305.JPEG", "n04465501_2611.JPEG", "n04465501_3110.JPEG", "n04465501_11436.JPEG", "n04465501_6169.JPEG", "n04465501_1506.JPEG", "n04465501_1262.JPEG", "n04465501_3667.JPEG", "n04465501_1764.JPEG", "n04465501_6775.JPEG", "n04465501_1651.JPEG", "n04465501_3694.JPEG", "n04465501_5175.JPEG", "n04465501_1235.JPEG"]},
"n04125021": {"images": ["n04125021_11556.JPEG", "n04125021_20667.JPEG", "n04125021_850.JPEG", "n04125021_27328.JPEG", "n04125021_528.JPEG", "n04125021_5326.JPEG", "n04125021_587.JPEG", "n04125021_17174.JPEG", "n04125021_1319.JPEG", "n04125021_25409.JPEG", "n04125021_16225.JPEG", "n04125021_1023.JPEG", "n04125021_13478.JPEG", "n04125021_593.JPEG", "n04125021_10418.JPEG", "n04125021_10131.JPEG", "n04125021_6969.JPEG", "n04125021_21252.JPEG", "n04125021_27353.JPEG", "n04125021_7739.JPEG", "n04125021_25036.JPEG", "n04125021_9753.JPEG", "n04125021_18044.JPEG", "n04125021_5284.JPEG", "n04125021_8636.JPEG", "n04125021_27861.JPEG", "n04125021_5274.JPEG", "n04125021_21659.JPEG", "n04125021_396.JPEG", "n04125021_11463.JPEG", "n04125021_14059.JPEG", "n04125021_4037.JPEG", "n04125021_7809.JPEG", "n04125021_9022.JPEG", "n04125021_17924.JPEG", "n04125021_16077.JPEG", "n04125021_11404.JPEG", "n04125021_629.JPEG", "n04125021_359.JPEG", "n04125021_4974.JPEG", "n04125021_13925.JPEG", "n04125021_10100.JPEG", "n04125021_14954.JPEG", "n04125021_12954.JPEG", "n04125021_28128.JPEG", "n04125021_3056.JPEG", "n04125021_27712.JPEG", "n04125021_5953.JPEG", "n04125021_19679.JPEG", "n04125021_21.JPEG", "n04125021_11655.JPEG", "n04125021_941.JPEG", "n04125021_18795.JPEG", "n04125021_12494.JPEG", "n04125021_14260.JPEG", "n04125021_5534.JPEG", "n04125021_26705.JPEG", "n04125021_19351.JPEG", "n04125021_18686.JPEG", "n04125021_27215.JPEG", "n04125021_14180.JPEG", "n04125021_27208.JPEG", "n04125021_9624.JPEG", "n04125021_8615.JPEG", "n04125021_19822.JPEG", "n04125021_13168.JPEG", "n04125021_25257.JPEG", "n04125021_3388.JPEG", "n04125021_8717.JPEG", "n04125021_2556.JPEG", "n04125021_25076.JPEG", "n04125021_27395.JPEG", "n04125021_17895.JPEG", "n04125021_18507.JPEG", "n04125021_18079.JPEG", "n04125021_11359.JPEG", "n04125021_2444.JPEG", "n04125021_9465.JPEG", "n04125021_6139.JPEG", "n04125021_4230.JPEG", "n04125021_18190.JPEG", "n04125021_11496.JPEG", "n04125021_17249.JPEG", "n04125021_2259.JPEG", "n04125021_13184.JPEG", "n04125021_9394.JPEG", "n04125021_27355.JPEG", "n04125021_19371.JPEG", "n04125021_25245.JPEG", "n04125021_18131.JPEG", "n04125021_17264.JPEG", "n04125021_15998.JPEG", "n04125021_8565.JPEG", "n04125021_319.JPEG", "n04125021_27749.JPEG", "n04125021_19875.JPEG", "n04125021_20579.JPEG", "n04125021_17419.JPEG", "n04125021_5088.JPEG", "n04125021_11097.JPEG"]},
"n02892767": {"images": ["n02892767_19061.JPEG", "n02892767_17067.JPEG", "n02892767_27396.JPEG", "n02892767_10010.JPEG", "n02892767_21923.JPEG", "n02892767_43781.JPEG", "n02892767_24600.JPEG", "n02892767_16387.JPEG", "n02892767_31464.JPEG", "n02892767_5967.JPEG", "n02892767_13269.JPEG", "n02892767_31917.JPEG", "n02892767_43952.JPEG", "n02892767_11250.JPEG", "n02892767_19254.JPEG", "n02892767_12706.JPEG", "n02892767_6042.JPEG", "n02892767_6798.JPEG", "n02892767_20926.JPEG", "n02892767_19269.JPEG", "n02892767_11677.JPEG", "n02892767_13939.JPEG", "n02892767_29324.JPEG", "n02892767_1683.JPEG", "n02892767_22327.JPEG", "n02892767_15429.JPEG", "n02892767_22428.JPEG", "n02892767_42936.JPEG", "n02892767_4089.JPEG", "n02892767_20561.JPEG", "n02892767_10509.JPEG", "n02892767_43558.JPEG", "n02892767_5625.JPEG", "n02892767_3008.JPEG", "n02892767_22292.JPEG", "n02892767_8061.JPEG", "n02892767_232.JPEG", "n02892767_25104.JPEG", "n02892767_6392.JPEG", "n02892767_607.JPEG", "n02892767_19957.JPEG", "n02892767_13853.JPEG", "n02892767_4611.JPEG", "n02892767_38469.JPEG", "n02892767_11508.JPEG", "n02892767_363.JPEG", "n02892767_12725.JPEG", "n02892767_22473.JPEG", "n02892767_34292.JPEG", "n02892767_17263.JPEG", "n02892767_3539.JPEG", "n02892767_25142.JPEG", "n02892767_6106.JPEG", "n02892767_21954.JPEG", "n02892767_4196.JPEG", "n02892767_4550.JPEG", "n02892767_885.JPEG", "n02892767_22293.JPEG", "n02892767_16952.JPEG", "n02892767_13276.JPEG", "n02892767_4570.JPEG", "n02892767_3727.JPEG", "n02892767_6967.JPEG", "n02892767_35319.JPEG", "n02892767_22073.JPEG", "n02892767_10793.JPEG", "n02892767_26211.JPEG", "n02892767_41552.JPEG", "n02892767_11018.JPEG", "n02892767_15480.JPEG", "n02892767_43934.JPEG", "n02892767_9708.JPEG", "n02892767_10573.JPEG", "n02892767_1561.JPEG", "n02892767_19834.JPEG", "n02892767_17133.JPEG", "n02892767_22211.JPEG", "n02892767_17488.JPEG", "n02892767_9430.JPEG", "n02892767_5889.JPEG", "n02892767_20888.JPEG", "n02892767_13319.JPEG", "n02892767_19808.JPEG", "n02892767_22571.JPEG", "n02892767_1343.JPEG", "n02892767_14012.JPEG", "n02892767_18204.JPEG", "n02892767_1338.JPEG", "n02892767_306.JPEG", "n02892767_19111.JPEG", "n02892767_19907.JPEG", "n02892767_11799.JPEG", "n02892767_42485.JPEG", "n02892767_21012.JPEG", "n02892767_15166.JPEG", "n02892767_17176.JPEG", "n02892767_42758.JPEG", "n02892767_20777.JPEG", "n02892767_2958.JPEG", "n02892767_17846.JPEG"]},
"n03594734": {"images": ["n03594734_32952.JPEG", "n03594734_43136.JPEG", "n03594734_34341.JPEG", "n03594734_64045.JPEG", "n03594734_42745.JPEG", "n03594734_38421.JPEG", "n03594734_37557.JPEG", "n03594734_45507.JPEG", "n03594734_33193.JPEG", "n03594734_12160.JPEG", "n03594734_38740.JPEG", "n03594734_42732.JPEG", "n03594734_30803.JPEG", "n03594734_8463.JPEG", "n03594734_1028.JPEG", "n03594734_38101.JPEG", "n03594734_696.JPEG", "n03594734_7429.JPEG", "n03594734_43051.JPEG", "n03594734_38742.JPEG", "n03594734_37878.JPEG", "n03594734_42409.JPEG", "n03594734_45455.JPEG", "n03594734_56185.JPEG", "n03594734_24374.JPEG", "n03594734_33546.JPEG", "n03594734_2249.JPEG", "n03594734_5186.JPEG", "n03594734_16890.JPEG", "n03594734_37898.JPEG", "n03594734_61847.JPEG", "n03594734_9526.JPEG", "n03594734_33504.JPEG", "n03594734_41817.JPEG", "n03594734_35251.JPEG", "n03594734_45039.JPEG", "n03594734_22563.JPEG", "n03594734_5685.JPEG", "n03594734_45170.JPEG", "n03594734_57894.JPEG", "n03594734_5232.JPEG", "n03594734_9634.JPEG", "n03594734_5991.JPEG", "n03594734_54457.JPEG", "n03594734_25046.JPEG", "n03594734_4793.JPEG", "n03594734_42784.JPEG", "n03594734_51182.JPEG", "n03594734_33408.JPEG", "n03594734_45149.JPEG", "n03594734_40789.JPEG", "n03594734_52400.JPEG", "n03594734_5957.JPEG", "n03594734_33254.JPEG", "n03594734_19640.JPEG", "n03594734_44348.JPEG", "n03594734_45272.JPEG", "n03594734_47569.JPEG", "n03594734_13523.JPEG", "n03594734_41625.JPEG", "n03594734_7123.JPEG", "n03594734_12746.JPEG", "n03594734_15973.JPEG", "n03594734_20191.JPEG", "n03594734_28213.JPEG", "n03594734_10857.JPEG", "n03594734_14145.JPEG", "n03594734_39905.JPEG", "n03594734_51122.JPEG", "n03594734_1616.JPEG", "n03594734_55738.JPEG", "n03594734_34276.JPEG", "n03594734_42371.JPEG", "n03594734_13328.JPEG", "n03594734_438.JPEG", "n03594734_47651.JPEG", "n03594734_21394.JPEG", "n03594734_70129.JPEG", "n03594734_45414.JPEG", "n03594734_34678.JPEG", "n03594734_2185.JPEG", "n03594734_56280.JPEG", "n03594734_4358.JPEG", "n03594734_45017.JPEG", "n03594734_70167.JPEG", "n03594734_10951.JPEG", "n03594734_57799.JPEG", "n03594734_42609.JPEG", "n03594734_4945.JPEG", "n03594734_33391.JPEG", "n03594734_77303.JPEG", "n03594734_43949.JPEG", "n03594734_34068.JPEG", "n03594734_9213.JPEG", "n03594734_44046.JPEG", "n03594734_33572.JPEG", "n03594734_18776.JPEG", "n03594734_41222.JPEG", "n03594734_72984.JPEG", "n03594734_38582.JPEG"]},
"n03196217": {"images": ["n03196217_1854.JPEG", "n03196217_2567.JPEG", "n03196217_2528.JPEG", "n03196217_981.JPEG", "n03196217_2414.JPEG", "n03196217_5359.JPEG", "n03196217_5895.JPEG", "n03196217_11320.JPEG", "n03196217_4717.JPEG", "n03196217_8190.JPEG", "n03196217_3647.JPEG", "n03196217_1678.JPEG", "n03196217_9589.JPEG", "n03196217_3232.JPEG", "n03196217_11471.JPEG", "n03196217_6101.JPEG", "n03196217_801.JPEG", "n03196217_1573.JPEG", "n03196217_3132.JPEG", "n03196217_11434.JPEG", "n03196217_1107.JPEG", "n03196217_5742.JPEG", "n03196217_8604.JPEG", "n03196217_5206.JPEG", "n03196217_1000.JPEG", "n03196217_3536.JPEG", "n03196217_899.JPEG", "n03196217_1007.JPEG", "n03196217_6934.JPEG", "n03196217_13201.JPEG", "n03196217_11182.JPEG", "n03196217_8217.JPEG", "n03196217_1187.JPEG", "n03196217_6302.JPEG", "n03196217_1197.JPEG", "n03196217_5832.JPEG", "n03196217_5137.JPEG", "n03196217_8719.JPEG", "n03196217_2488.JPEG", "n03196217_2467.JPEG", "n03196217_6972.JPEG", "n03196217_4844.JPEG", "n03196217_6397.JPEG", "n03196217_1831.JPEG", "n03196217_2462.JPEG", "n03196217_9182.JPEG", "n03196217_6470.JPEG", "n03196217_3689.JPEG", "n03196217_5374.JPEG", "n03196217_1059.JPEG", "n03196217_3100.JPEG", "n03196217_1391.JPEG", "n03196217_8586.JPEG", "n03196217_6881.JPEG", "n03196217_4753.JPEG", "n03196217_9615.JPEG", "n03196217_11054.JPEG", "n03196217_1079.JPEG", "n03196217_4147.JPEG", "n03196217_6005.JPEG", "n03196217_9432.JPEG", "n03196217_4130.JPEG", "n03196217_1628.JPEG", "n03196217_3283.JPEG", "n03196217_1912.JPEG", "n03196217_10812.JPEG", "n03196217_5149.JPEG", "n03196217_152.JPEG", "n03196217_12701.JPEG", "n03196217_5214.JPEG", "n03196217_3465.JPEG", "n03196217_1321.JPEG", "n03196217_7254.JPEG", "n03196217_2913.JPEG", "n03196217_243.JPEG", "n03196217_8638.JPEG", "n03196217_2179.JPEG", "n03196217_4879.JPEG", "n03196217_1846.JPEG", "n03196217_5404.JPEG", "n03196217_3017.JPEG", "n03196217_10202.JPEG", "n03196217_5787.JPEG", "n03196217_3744.JPEG", "n03196217_5934.JPEG", "n03196217_3801.JPEG", "n03196217_5275.JPEG", "n03196217_2366.JPEG", "n03196217_1202.JPEG", "n03196217_5129.JPEG", "n03196217_5502.JPEG", "n03196217_1951.JPEG", "n03196217_8859.JPEG", "n03196217_6825.JPEG", "n03196217_5405.JPEG", "n03196217_6426.JPEG", "n03196217_7569.JPEG", "n03196217_2098.JPEG", "n03196217_8943.JPEG", "n03196217_10641.JPEG"]},
"n03485794": {"images": ["n03485794_383.JPEG", "n03485794_58156.JPEG", "n03485794_43053.JPEG", "n03485794_53345.JPEG", "n03485794_32228.JPEG", "n03485794_4194.JPEG", "n03485794_69014.JPEG", "n03485794_12907.JPEG", "n03485794_46803.JPEG", "n03485794_15449.JPEG", "n03485794_36524.JPEG", "n03485794_29625.JPEG", "n03485794_34135.JPEG", "n03485794_4987.JPEG", "n03485794_32572.JPEG", "n03485794_62004.JPEG", "n03485794_8475.JPEG", "n03485794_4001.JPEG", "n03485794_6643.JPEG", "n03485794_22604.JPEG", "n03485794_31937.JPEG", "n03485794_14700.JPEG", "n03485794_14735.JPEG", "n03485794_17816.JPEG", "n03485794_9997.JPEG", "n03485794_3636.JPEG", "n03485794_1976.JPEG", "n03485794_34141.JPEG", "n03485794_20086.JPEG", "n03485794_11248.JPEG", "n03485794_14683.JPEG", "n03485794_11060.JPEG", "n03485794_10393.JPEG", "n03485794_46422.JPEG", "n03485794_23004.JPEG", "n03485794_20770.JPEG", "n03485794_23049.JPEG", "n03485794_51390.JPEG", "n03485794_7368.JPEG", "n03485794_40957.JPEG", "n03485794_18228.JPEG", "n03485794_10689.JPEG", "n03485794_23785.JPEG", "n03485794_22839.JPEG", "n03485794_3830.JPEG", "n03485794_22714.JPEG", "n03485794_13357.JPEG", "n03485794_39426.JPEG", "n03485794_3684.JPEG", "n03485794_7495.JPEG", "n03485794_17671.JPEG", "n03485794_27694.JPEG", "n03485794_28637.JPEG", "n03485794_171.JPEG", "n03485794_12884.JPEG", "n03485794_22071.JPEG", "n03485794_19036.JPEG", "n03485794_14656.JPEG", "n03485794_39431.JPEG", "n03485794_7549.JPEG", "n03485794_21179.JPEG", "n03485794_16451.JPEG", "n03485794_55618.JPEG", "n03485794_35540.JPEG", "n03485794_25238.JPEG", "n03485794_25650.JPEG", "n03485794_10284.JPEG", "n03485794_24694.JPEG", "n03485794_44436.JPEG", "n03485794_32745.JPEG", "n03485794_7538.JPEG", "n03485794_1524.JPEG", "n03485794_3516.JPEG", "n03485794_21308.JPEG", "n03485794_11827.JPEG", "n03485794_5023.JPEG", "n03485794_40134.JPEG", "n03485794_14831.JPEG", "n03485794_6576.JPEG", "n03485794_1287.JPEG", "n03485794_30677.JPEG", "n03485794_9235.JPEG", "n03485794_17062.JPEG", "n03485794_8686.JPEG", "n03485794_56044.JPEG", "n03485794_62428.JPEG", "n03485794_1280.JPEG", "n03485794_15334.JPEG", "n03485794_951.JPEG", "n03485794_480.JPEG", "n03485794_36992.JPEG", "n03485794_25961.JPEG", "n03485794_24329.JPEG", "n03485794_3807.JPEG", "n03485794_22869.JPEG", "n03485794_4304.JPEG", "n03485794_1006.JPEG", "n03485794_10216.JPEG", "n03485794_9173.JPEG", "n03485794_8789.JPEG"]},
"n02088364": {"images": ["n02088364_7532.JPEG", "n02088364_6107.JPEG", "n02088364_10950.JPEG", "n02088364_16379.JPEG", "n02088364_15404.JPEG", "n02088364_3758.JPEG", "n02088364_7076.JPEG", "n02088364_17167.JPEG", "n02088364_3995.JPEG", "n02088364_5801.JPEG", "n02088364_4983.JPEG", "n02088364_7504.JPEG", "n02088364_9302.JPEG", "n02088364_13509.JPEG", "n02088364_10971.JPEG", "n02088364_14293.JPEG", "n02088364_8329.JPEG", "n02088364_2825.JPEG", "n02088364_6046.JPEG", "n02088364_8536.JPEG", "n02088364_4670.JPEG", "n02088364_7598.JPEG", "n02088364_14972.JPEG", "n02088364_4236.JPEG", "n02088364_12869.JPEG", "n02088364_4575.JPEG", "n02088364_2772.JPEG", "n02088364_3680.JPEG", "n02088364_10877.JPEG", "n02088364_11698.JPEG", "n02088364_17314.JPEG", "n02088364_639.JPEG", "n02088364_13616.JPEG", "n02088364_2704.JPEG", "n02088364_3560.JPEG", "n02088364_1035.JPEG", "n02088364_5582.JPEG", "n02088364_427.JPEG", "n02088364_13809.JPEG", "n02088364_1681.JPEG", "n02088364_5184.JPEG", "n02088364_7174.JPEG", "n02088364_16575.JPEG", "n02088364_637.JPEG", "n02088364_14076.JPEG", "n02088364_16753.JPEG", "n02088364_14467.JPEG", "n02088364_420.JPEG", "n02088364_15082.JPEG", "n02088364_7285.JPEG", "n02088364_6135.JPEG", "n02088364_3874.JPEG", "n02088364_10195.JPEG", "n02088364_8488.JPEG", "n02088364_8566.JPEG", "n02088364_2335.JPEG", "n02088364_12852.JPEG", "n02088364_6358.JPEG", "n02088364_3833.JPEG", "n02088364_2402.JPEG", "n02088364_8157.JPEG", "n02088364_17689.JPEG", "n02088364_17474.JPEG", "n02088364_14332.JPEG", "n02088364_13028.JPEG", "n02088364_12659.JPEG", "n02088364_6991.JPEG", "n02088364_2192.JPEG", "n02088364_4111.JPEG", "n02088364_5578.JPEG", "n02088364_8859.JPEG", "n02088364_10734.JPEG", "n02088364_4316.JPEG", "n02088364_12434.JPEG", "n02088364_1409.JPEG", "n02088364_12654.JPEG", "n02088364_10641.JPEG", "n02088364_10970.JPEG", "n02088364_11136.JPEG", "n02088364_17077.JPEG", "n02088364_12604.JPEG", "n02088364_5427.JPEG", "n02088364_4415.JPEG", "n02088364_5915.JPEG", "n02088364_1449.JPEG", "n02088364_4802.JPEG", "n02088364_13484.JPEG", "n02088364_14345.JPEG", "n02088364_8674.JPEG", "n02088364_12952.JPEG", "n02088364_18130.JPEG", "n02088364_3900.JPEG", "n02088364_4619.JPEG", "n02088364_5426.JPEG", "n02088364_484.JPEG", "n02088364_3767.JPEG", "n02088364_8950.JPEG", "n02088364_5095.JPEG", "n02088364_3781.JPEG", "n02088364_10108.JPEG"]},
"n03223299": {"images": ["n03223299_892.JPEG", "n03223299_21597.JPEG", "n03223299_2086.JPEG", "n03223299_6320.JPEG", "n03223299_9949.JPEG", "n03223299_12996.JPEG", "n03223299_5866.JPEG", "n03223299_14628.JPEG", "n03223299_2945.JPEG", "n03223299_2426.JPEG", "n03223299_1257.JPEG", "n03223299_16971.JPEG", "n03223299_47194.JPEG", "n03223299_32852.JPEG", "n03223299_14494.JPEG", "n03223299_17676.JPEG", "n03223299_10001.JPEG", "n03223299_2029.JPEG", "n03223299_11081.JPEG", "n03223299_8095.JPEG", "n03223299_368.JPEG", "n03223299_2864.JPEG", "n03223299_610.JPEG", "n03223299_36655.JPEG", "n03223299_22798.JPEG", "n03223299_8418.JPEG", "n03223299_19454.JPEG", "n03223299_10076.JPEG", "n03223299_15867.JPEG", "n03223299_17613.JPEG", "n03223299_8583.JPEG", "n03223299_6694.JPEG", "n03223299_19647.JPEG", "n03223299_7168.JPEG", "n03223299_30762.JPEG", "n03223299_35132.JPEG", "n03223299_7074.JPEG", "n03223299_11948.JPEG", "n03223299_7211.JPEG", "n03223299_35897.JPEG", "n03223299_4518.JPEG", "n03223299_5119.JPEG", "n03223299_6370.JPEG", "n03223299_255.JPEG", "n03223299_4836.JPEG", "n03223299_2304.JPEG", "n03223299_11264.JPEG", "n03223299_38456.JPEG", "n03223299_4837.JPEG", "n03223299_485.JPEG", "n03223299_17531.JPEG", "n03223299_8207.JPEG", "n03223299_10048.JPEG", "n03223299_11887.JPEG", "n03223299_16056.JPEG", "n03223299_7572.JPEG", "n03223299_7715.JPEG", "n03223299_16194.JPEG", "n03223299_13570.JPEG", "n03223299_1605.JPEG", "n03223299_12447.JPEG", "n03223299_8069.JPEG", "n03223299_5846.JPEG", "n03223299_4385.JPEG", "n03223299_6473.JPEG", "n03223299_6537.JPEG", "n03223299_14505.JPEG", "n03223299_7910.JPEG", "n03223299_5176.JPEG", "n03223299_6586.JPEG", "n03223299_6818.JPEG", "n03223299_17833.JPEG", "n03223299_9225.JPEG", "n03223299_7380.JPEG", "n03223299_9394.JPEG", "n03223299_9077.JPEG", "n03223299_3594.JPEG", "n03223299_21875.JPEG", "n03223299_6444.JPEG", "n03223299_3034.JPEG", "n03223299_13116.JPEG", "n03223299_3181.JPEG", "n03223299_4088.JPEG", "n03223299_2874.JPEG", "n03223299_2593.JPEG", "n03223299_5772.JPEG", "n03223299_11158.JPEG", "n03223299_3055.JPEG", "n03223299_17130.JPEG", "n03223299_10893.JPEG", "n03223299_653.JPEG", "n03223299_11921.JPEG", "n03223299_10472.JPEG", "n03223299_16801.JPEG", "n03223299_8063.JPEG", "n03223299_2515.JPEG", "n03223299_49051.JPEG", "n03223299_16818.JPEG", "n03223299_17332.JPEG", "n03223299_5010.JPEG"]},
}
names = {
"n02096437": "Dandie Dinmont, Dandie Dinmont terrier",
"n02917067": "bullet train, bullet",
"n04465501": "tractor",
"n04125021": "safe",
"n02892767": "brassiere, bra, bandeau",
"n03594734": "jean, blue jean, denim",
"n03196217": "digital clock",
"n03485794": "handkerchief, hankie, hanky, hankey",
"n02088364": "beagle",
"n03223299": "doormat, welcome mat",
}
import glob
def get_activations(img_path):
x = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(x)
x = np.expand_dims(x, axis=0)
x = tf.keras.applications.vgg19.preprocess_input(x)
activations = model_vgg19_cutoff.predict(x)
return activations
node4max_activations = model_vgg19_cutoff.predict(tf.keras.applications.vgg19.preprocess_input(np.expand_dims(img, axis=0)))
node4max10_activations = model_vgg19_cutoff.predict(tf.keras.applications.vgg19.preprocess_input(np.expand_dims(img_10, axis=0)))
def distance(a,b=node4max_activations):
return np.sqrt(np.sum((a-b)**2))
cdefault = plt.rcParams['axes.prop_cycle'].by_key()['color']
all_activations = []
all_colours = []
j = 0
for key in categories.keys():
print(key)
categories[key]["activations"] = [get_activations("/data/nfs/ILSVRC2012_img_train/"+i) for i in categories[key]["images"]]
for i in range(100):
all_activations.append(np.mean(np.mean(categories[key]["activations"][i][0], axis=0), axis=0))
colour = cdefault[j]
all_colours.append(colour)
j += 1
groenendael = {"images": ["n02105056_5212.JPEG", "n02105056_1545.JPEG", "n02105056_11810.JPEG", "n02105056_13589.JPEG", "n02105056_26.JPEG", "n02105056_2948.JPEG", "n02105056_4695.JPEG", "n02105056_1716.JPEG", "n02105056_4770.JPEG", "n02105056_8374.JPEG", "n02105056_13039.JPEG", "n02105056_2246.JPEG", "n02105056_67.JPEG", "n02105056_11886.JPEG", "n02105056_3270.JPEG", "n02105056_6998.JPEG", "n02105056_2834.JPEG", "n02105056_14438.JPEG", "n02105056_9362.JPEG", "n02105056_6266.JPEG", "n02105056_627.JPEG", "n02105056_9957.JPEG", "n02105056_8190.JPEG", "n02105056_5530.JPEG", "n02105056_3762.JPEG", "n02105056_12288.JPEG", "n02105056_3714.JPEG", "n02105056_11958.JPEG", "n02105056_2520.JPEG", "n02105056_10189.JPEG", "n02105056_6832.JPEG", "n02105056_8442.JPEG", "n02105056_1206.JPEG", "n02105056_298.JPEG", "n02105056_9262.JPEG", "n02105056_5838.JPEG", "n02105056_13175.JPEG", "n02105056_12631.JPEG", "n02105056_584.JPEG", "n02105056_6464.JPEG", "n02105056_456.JPEG", "n02105056_3469.JPEG", "n02105056_2831.JPEG", "n02105056_15335.JPEG", "n02105056_14576.JPEG", "n02105056_5618.JPEG", "n02105056_10013.JPEG", "n02105056_13362.JPEG", "n02105056_7280.JPEG", "n02105056_4960.JPEG", "n02105056_11356.JPEG", "n02105056_6381.JPEG", "n02105056_98.JPEG", "n02105056_9032.JPEG", "n02105056_13125.JPEG", "n02105056_5947.JPEG", "n02105056_6242.JPEG", "n02105056_1910.JPEG", "n02105056_3091.JPEG", "n02105056_10857.JPEG", "n02105056_7475.JPEG", "n02105056_6540.JPEG", "n02105056_3399.JPEG", "n02105056_14530.JPEG", "n02105056_15670.JPEG", "n02105056_2705.JPEG", "n02105056_4407.JPEG", "n02105056_8167.JPEG", "n02105056_9141.JPEG", "n02105056_4291.JPEG", "n02105056_10460.JPEG", "n02105056_201.JPEG", "n02105056_8242.JPEG", "n02105056_6785.JPEG", "n02105056_6211.JPEG", "n02105056_12750.JPEG", "n02105056_11747.JPEG", "n02105056_8272.JPEG", "n02105056_6024.JPEG", "n02105056_11918.JPEG", "n02105056_4139.JPEG", "n02105056_7057.JPEG", "n02105056_13170.JPEG", "n02105056_5387.JPEG", "n02105056_3669.JPEG", "n02105056_4956.JPEG", "n02105056_2195.JPEG", "n02105056_10979.JPEG", "n02105056_3096.JPEG", "n02105056_9209.JPEG", "n02105056_4493.JPEG", "n02105056_69.JPEG", "n02105056_10559.JPEG", "n02105056_11161.JPEG", "n02105056_4025.JPEG", "n02105056_6448.JPEG", "n02105056_2802.JPEG", "n02105056_10569.JPEG", "n02105056_14850.JPEG", "n02105056_7305.JPEG"]}
groenendael["activations"] = [get_activations("/data/nfs/ILSVRC2012_img_train/"+i) for i in groenendael["images"]]
tench = {"images": ["n02105056_14890.JPEG", "n02105056_784.JPEG", "n02105056_911.JPEG", "n02105056_7023.JPEG", "n02105056_7444.JPEG", "n02105056_2112.JPEG", "n02105056_10796.JPEG", "n02105056_13901.JPEG", "n02105056_4760.JPEG", "n02105056_14438.JPEG", "n02105056_2434.JPEG", "n02105056_5298.JPEG", "n02105056_14753.JPEG", "n02105056_9615.JPEG", "n02105056_8562.JPEG", "n02105056_13970.JPEG", "n02105056_3595.JPEG", "n02105056_15636.JPEG", "n02105056_12663.JPEG", "n02105056_6679.JPEG", "n02105056_4916.JPEG", "n02105056_653.JPEG", "n02105056_3761.JPEG", "n02105056_4121.JPEG", "n02105056_2540.JPEG", "n02105056_1061.JPEG", "n02105056_1355.JPEG", "n02105056_2520.JPEG", "n02105056_10005.JPEG", "n02105056_6605.JPEG", "n02105056_6101.JPEG", "n02105056_1228.JPEG", "n02105056_1608.JPEG", "n02105056_4713.JPEG", "n02105056_742.JPEG", "n02105056_961.JPEG", "n02105056_6661.JPEG", "n02105056_15556.JPEG", "n02105056_11338.JPEG", "n02105056_5126.JPEG", "n02105056_7739.JPEG", "n02105056_3754.JPEG", "n02105056_4106.JPEG", "n02105056_7481.JPEG", "n02105056_12556.JPEG", "n02105056_3413.JPEG", "n02105056_6125.JPEG", "n02105056_3051.JPEG", "n02105056_10075.JPEG", "n02105056_15673.JPEG", "n02105056_1941.JPEG", "n02105056_2026.JPEG", "n02105056_420.JPEG", "n02105056_4766.JPEG", "n02105056_5636.JPEG", "n02105056_8000.JPEG", "n02105056_584.JPEG", "n02105056_3531.JPEG", "n02105056_12249.JPEG", "n02105056_3696.JPEG", "n02105056_5638.JPEG", "n02105056_12247.JPEG", "n02105056_140.JPEG", "n02105056_3422.JPEG", "n02105056_1357.JPEG", "n02105056_948.JPEG", "n02105056_15334.JPEG", "n02105056_3117.JPEG", "n02105056_15363.JPEG", "n02105056_6468.JPEG", "n02105056_2364.JPEG", "n02105056_11946.JPEG", "n02105056_2894.JPEG", "n02105056_4518.JPEG", "n02105056_6811.JPEG", "n02105056_10537.JPEG", "n02105056_1915.JPEG", "n02105056_5515.JPEG", "n02105056_11823.JPEG", "n02105056_4684.JPEG", "n02105056_1227.JPEG", "n02105056_4016.JPEG", "n02105056_4335.JPEG", "n02105056_13018.JPEG", "n02105056_6614.JPEG", "n02105056_2036.JPEG", "n02105056_4535.JPEG", "n02105056_2413.JPEG", "n02105056_8670.JPEG", "n02105056_8151.JPEG", "n02105056_1668.JPEG", "n02105056_4755.JPEG", "n02105056_10179.JPEG", "n02105056_2948.JPEG", "n02105056_1470.JPEG", "n02105056_6306.JPEG", "n02105056_8064.JPEG", "n02105056_1160.JPEG", "n02105056_10871.JPEG", "n02105056_5947.JPEG"]}
tench["activations"] = [get_activations("/data/nfs/ILSVRC2012_img_train/"+i) for i in tench["images"]]
seacucumber = {"images": ["n02321529_6175.JPEG", "n02321529_5636.JPEG", "n02321529_10082.JPEG", "n02321529_9099.JPEG", "n02321529_2844.JPEG", "n02321529_2881.JPEG", "n02321529_8919.JPEG", "n02321529_15625.JPEG", "n02321529_7167.JPEG", "n02321529_14170.JPEG", "n02321529_4903.JPEG", "n02321529_3421.JPEG", "n02321529_17363.JPEG", "n02321529_2472.JPEG", "n02321529_6488.JPEG", "n02321529_2958.JPEG", "n02321529_5262.JPEG", "n02321529_4763.JPEG", "n02321529_2514.JPEG", "n02321529_18633.JPEG", "n02321529_8393.JPEG", "n02321529_3547.JPEG", "n02321529_3607.JPEG", "n02321529_19713.JPEG", "n02321529_3706.JPEG", "n02321529_8746.JPEG", "n02321529_9475.JPEG", "n02321529_7352.JPEG", "n02321529_5000.JPEG", "n02321529_4027.JPEG", "n02321529_4262.JPEG", "n02321529_3387.JPEG", "n02321529_3621.JPEG", "n02321529_9268.JPEG", "n02321529_9047.JPEG", "n02321529_13358.JPEG", "n02321529_10642.JPEG", "n02321529_8216.JPEG", "n02321529_10071.JPEG", "n02321529_9949.JPEG", "n02321529_2439.JPEG", "n02321529_5825.JPEG", "n02321529_393.JPEG", "n02321529_4700.JPEG", "n02321529_19113.JPEG", "n02321529_394.JPEG", "n02321529_16979.JPEG", "n02321529_198.JPEG", "n02321529_4035.JPEG", "n02321529_6632.JPEG", "n02321529_4450.JPEG", "n02321529_10826.JPEG", "n02321529_8571.JPEG", "n02321529_6708.JPEG", "n02321529_938.JPEG", "n02321529_4242.JPEG", "n02321529_2692.JPEG", "n02321529_4071.JPEG", "n02321529_7476.JPEG", "n02321529_6026.JPEG", "n02321529_981.JPEG", "n02321529_3544.JPEG", "n02321529_8473.JPEG", "n02321529_17635.JPEG", "n02321529_9860.JPEG", "n02321529_7215.JPEG", "n02321529_9781.JPEG", "n02321529_5576.JPEG", "n02321529_11874.JPEG", "n02321529_4463.JPEG", "n02321529_3244.JPEG", "n02321529_8849.JPEG", "n02321529_567.JPEG", "n02321529_3490.JPEG", "n02321529_6832.JPEG", "n02321529_2444.JPEG", "n02321529_9622.JPEG", "n02321529_4744.JPEG", "n02321529_6028.JPEG", "n02321529_5849.JPEG", "n02321529_2279.JPEG", "n02321529_3288.JPEG", "n02321529_2295.JPEG", "n02321529_7337.JPEG", "n02321529_516.JPEG", "n02321529_8988.JPEG", "n02321529_13909.JPEG", "n02321529_2603.JPEG", "n02321529_17779.JPEG", "n02321529_14333.JPEG", "n02321529_14207.JPEG", "n02321529_4778.JPEG", "n02321529_16840.JPEG", "n02321529_12049.JPEG", "n02321529_6302.JPEG", "n02321529_10126.JPEG", "n02321529_2889.JPEG", "n02321529_3778.JPEG", "n02321529_16424.JPEG", "n02321529_8554.JPEG"]}
seacucumber["activations"] = [get_activations("/data/nfs/ILSVRC2012_img_train/"+i) for i in seacucumber["images"]]
random = {"images": ["n03788195_83987.JPEG", "n04606251_5251.JPEG", "n01667778_1166.JPEG", "n02236044_2664.JPEG", "n04493381_2438.JPEG", "n02443484_2123.JPEG", "n03920288_4308.JPEG", "n03877472_47399.JPEG", "n01820546_16600.JPEG", "n01968897_15901.JPEG", "n02119022_2225.JPEG", "n02667093_3287.JPEG", "n01734418_17286.JPEG", "n01797886_18561.JPEG", "n02112350_1108.JPEG", "n03967562_4068.JPEG", "n04252077_3740.JPEG", "n04376876_30329.JPEG", "n01496331_3153.JPEG", "n04264628_5890.JPEG", "n04179913_16122.JPEG", "n02607072_5165.JPEG", "n03929855_519.JPEG", "n02687172_54886.JPEG", "n03250847_1469.JPEG", "n02088632_6397.JPEG", "n03884397_14673.JPEG", "n02655020_4204.JPEG", "n02229544_6729.JPEG", "n04428191_18708.JPEG", "n03935335_15334.JPEG", "n04482393_11872.JPEG", "n02091831_5145.JPEG", "n01795545_13446.JPEG", "n02104365_9554.JPEG", "n04443257_19873.JPEG", "n04254120_723.JPEG", "n02279972_18226.JPEG", "n02087394_10491.JPEG", "n07754684_5213.JPEG", "n03623198_5682.JPEG", "n13044778_6819.JPEG", "n02687172_98394.JPEG", "n02410509_1209.JPEG", "n03372029_63925.JPEG", "n02445715_13744.JPEG", "n03775546_8521.JPEG", "n02093754_2917.JPEG", "n02443484_3904.JPEG", "n03786901_4028.JPEG", "n03980874_20366.JPEG", "n03065424_33300.JPEG", "n03388183_2456.JPEG", "n04133789_3508.JPEG", "n02807133_16519.JPEG", "n03384352_3229.JPEG", "n03216828_25251.JPEG", "n03028079_30177.JPEG", "n09288635_3488.JPEG", "n06785654_21572.JPEG", "n02979186_811.JPEG", "n04597913_2271.JPEG", "n02808304_3631.JPEG", "n01795545_3879.JPEG", "n02281787_3727.JPEG", "n03201208_2322.JPEG", "n04548280_7850.JPEG", "n02100583_7282.JPEG", "n02883205_302.JPEG", "n02727426_4368.JPEG", "n01774384_4184.JPEG", "n02009229_6920.JPEG", "n03743016_29474.JPEG", "n04243546_4162.JPEG", "n02127052_1004.JPEG", "n07749582_23439.JPEG", "n01806567_3189.JPEG", "n04026417_49418.JPEG", "n04258138_7378.JPEG", "n03733131_292.JPEG", "n02892767_16060.JPEG", "n04154565_747.JPEG", "n01518878_17820.JPEG", "n02606052_22087.JPEG", "n02951358_11882.JPEG", "n02281406_6350.JPEG", "n03840681_20584.JPEG", "n02129165_13187.JPEG", "n02105162_5667.JPEG", "n01824575_8823.JPEG", "n03903868_39863.JPEG", "n01644373_3804.JPEG", "n02777292_27748.JPEG", "n01985128_23820.JPEG", "n02112137_9478.JPEG", "n03249569_18546.JPEG", "n01882714_6102.JPEG", "n02167151_6129.JPEG", "n03937543_3430.JPEG", "n01582220_8533.JPEG"]}
random["activations"] = [get_activations("/data/nfs/ILSVRC2012_img_train/"+i) for i in random["images"]]
intra_distances = []
inter_distances = []
random_distances = []
tench_distances = []
groenendael_distances = []
seacucumber_distances = []
random_distances_n4m = []
cat_distances_n4m = []
tench_distances_n4m = []
groenendael_distances_n4m = []
seacucumber_distances_n4m = []
random_distances_n4m10 = []
cat_distances_n4m10 = []
tench_distances_n4m10 = []
groenendael_distances_n4m10 = []
seacucumber_distances_n4m10 = []
# inter_distances
for key in categories.keys():
for key2 in categories.keys():
if key != key2:
print(key, key2)
for a in categories[key]["activations"]:
for b in categories[key2]["activations"]:
inter_distances.append(distance(a=a, b=b))
# intra_distances
for key in categories.keys():
print(key)
for a in categories[key]["activations"]:
cat_distances_n4m.append(distance(a=a, b=node4max_activations))
cat_distances_n4m10.append(distance(a=a, b=node4max10_activations))
for b in categories[key]["activations"]:
if not np.allclose(a,b):
intra_distances.append(distance(a=a, b=b))
for a in random["activations"]:
random_distances_n4m.append(distance(a=a, b=node4max_activations))
random_distances_n4m10.append(distance(a=a, b=node4max10_activations))
for b in random["activations"]:
if not np.allclose(a,b):
random_distances.append(distance(a=a, b=b))
for a in tench["activations"]:
tench_distances_n4m.append(distance(a=a, b=node4max_activations))
tench_distances_n4m10.append(distance(a=a, b=node4max10_activations))
for b in tench["activations"]:
if not np.allclose(a,b):
tench_distances.append(distance(a=a, b=b))
for a in groenendael["activations"]:
groenendael_distances_n4m.append(distance(a=a, b=node4max_activations))
groenendael_distances_n4m10.append(distance(a=a, b=node4max10_activations))
for b in groenendael["activations"]:
if not np.allclose(a,b):
groenendael_distances.append(distance(a=a, b=b))
for a in seacucumber["activations"]:
seacucumber_distances_n4m.append(distance(a=a, b=node4max_activations))
seacucumber_distances_n4m10.append(distance(a=a, b=node4max10_activations))
for b in seacucumber["activations"]:
if not np.allclose(a,b):
seacucumber_distances.append(distance(a=a, b=b))
plt.figure()
plt.title("Typical L2 distance between non-identical activations")
plt.hist(random_distances, color="grey", density=True, bins=33, histtype="step", label="Random activations")
plt.hist(intra_distances, color="red", density=True, bins=100, histtype="step", label="Within a category (intra)")
plt.hist(inter_distances, color="blue", density=True, bins=100, histtype="step", label="Between different categories (inter)")
plt.xlabel("Distance (L2 norm in 512 dimensions)")
plt.legend()
plt.savefig("activation_distances_general.png", dpi=600)
plt.close()
fig, [ax1, ax2] = plt.subplots(ncols=2, figsize=(14,6))
fig.suptitle("Distance to activation of special node4-maximized image")
ax1.set_title("10-step optimized image")
ax1.hist(inter_distances, color="blue", density=True, bins=100, histtype="step", label="Typical inter-category distance")
ax1.hist(seacucumber_distances_n4m10, color="green", density=True, bins=20, histtype="step", label="training-sea_cucumber activations")
ax1.hist(groenendael_distances_n4m10, color="lightblue", density=True, bins=10, histtype="step", label="training-groenendael activations")
ax1.hist(cat_distances_n4m10, color="orange", density=True, bins=20, histtype="step", label="other training activations")
ax1.legend(loc="upper left")
ax1.set_xlabel("Distance (L2 norm in 512 dimensions)")
ax2.set_title("100-step optimized image")
ax2.hist(seacucumber_distances_n4m, color="darkgreen", density=True, bins=20, histtype="step", label="training-sea_cucumber activations")
ax2.hist(groenendael_distances_n4m, color="blue", density=True, bins=10, histtype="step", label="training-groenendael activations")
ax2.hist(cat_distances_n4m, color="red", density=True, bins=20, histtype="step", label="other training activations")
ax2.legend(loc="upper left")
ax1.set_xlabel("Distance (L2 norm in 512 dimensions)")
fig.savefig("activation_distances_node4maximized.png", dpi=600)
plt.close()
# So given that node4-maximized point is waaay far out in activation-space (in absolute distance)
# one would think the fact that it is classified as sea_cucumber is some artifact of the classifier
# layers (i.e. the top dense layers), but then why is the effect persistent over VGG16, 19, Inception etc?
from sklearn.manifold import TSNE
from copy import deepcopy
activations_with_n4m = deepcopy(list(all_activations))
activations_with_n4m.append(np.mean(np.mean(node4max10_activations[0], axis=0), axis=0))
activations_with_n4m.append(np.mean(np.mean(node4max_activations[0], axis=0), axis=0))
for i in range(len(seacucumber["activations"])):
activations_with_n4m.append(np.mean(np.mean(seacucumber["activations"][i][0], axis=0), axis=0))
activations_with_n4m = np.array(activations_with_n4m)
tsne = TSNE(n_components=2, learning_rate='auto', init='random')
embedded = tsne.fit_transform(activations_with_n4m)
plt.figure(figsize=(14, 8))
plt.scatter(*embedded[:-102].T, c=all_colours)
plt.scatter(*embedded[-100:-2].T, c="grey", marker="x", s=60, label="sea cucumber")
plt.scatter(*embedded[-2:].T, c="black", marker="*", s=100, label="node4-maximized activation")
xlim = plt.xlim()
ylim = plt.ylim()
i=0
for key in names:
val = names[key]
print(val)
plt.scatter(-1e3, -1e3, c=cdefault[i], label=val)
i+=1
plt.title("t-SNE embedding")
plt.xlim(*xlim)
plt.ylim(*ylim)
plt.legend()
plt.savefig("tSNE.png", dpi=600)
plt.close()
# Huh, okay -- we don't kow what exactly tSNE is doing but the node4-maximized activations
# always end up represented near the sea_cucumber training data!
def plot_activations_direct(activations, ax=None):
if ax==None:
fig, ax = plt.subplots()
av_activations = np.mean(np.mean(np.mean(activations, axis=0), axis=0), axis=0)
ax.plot(av_activations)
ax.scatter(4, av_activations[4])
ax.set_xlabel("block5_conv4 index")
ax.set_ylabel("Activation value")
return ax
fig, axs = plt.subplots(nrows=3)
fig.suptitle(" n02321529: sea_cucumber")
plot_activations_direct(seacucumber["activations"][33], ax=axs[0])
plot_activations_direct(seacucumber["activations"][66], ax=axs[1])
plot_activations_direct(seacucumber["activations"][99], ax=axs[2])
plt.savefig("seacucumber.png", dpi=600)
plt.close()