回答編集履歴
3
d
test
CHANGED
@@ -5,12 +5,6 @@
|
|
5
5
|
|
6
6
|
|
7
7
|
## 追記
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
こちらで下記のコードで確認しましたが、バッチサイズによらず結果は一致しました。
|
12
|
-
|
13
|
-
なお、Tensorflow に付属している Keras を使ってます。
|
14
8
|
|
15
9
|
|
16
10
|
|
@@ -36,16 +30,28 @@
|
|
36
30
|
|
37
31
|
img = np.float32(img) / 255
|
38
32
|
|
39
|
-
image_data = np.array([img for i in range(
|
33
|
+
image_data = np.array([img for i in range(50)])
|
40
|
-
|
41
|
-
print(image_data.shape)
|
42
34
|
|
43
35
|
|
44
36
|
|
45
|
-
|
37
|
+
base_model = Xception(include_top=True, weights="imagenet", input_shape=(299, 299, 3))
|
46
38
|
|
47
|
-
|
39
|
+
for i in range(100):
|
48
40
|
|
41
|
+
model = Model(inputs=base_model.input, outputs=base_model.layers[i + 2].output)
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
p1 = model.predict(image_data, batch_size=1)
|
46
|
+
|
47
|
+
p2 = model.predict(image_data, batch_size=32)
|
48
|
+
|
49
|
-
|
49
|
+
if not np.allclose(p1, p2, rtol=1e-03):
|
50
|
+
|
51
|
+
print(p1.ravel()[:10])
|
52
|
+
|
53
|
+
print(p2.ravel()[:10])
|
54
|
+
|
55
|
+
break
|
50
56
|
|
51
57
|
```
|
2
d
test
CHANGED
@@ -9,6 +9,8 @@
|
|
9
9
|
|
10
10
|
|
11
11
|
こちらで下記のコードで確認しましたが、バッチサイズによらず結果は一致しました。
|
12
|
+
|
13
|
+
なお、Tensorflow に付属している Keras を使ってます。
|
12
14
|
|
13
15
|
|
14
16
|
|
1
d
test
CHANGED
@@ -1,3 +1,49 @@
|
|
1
1
|
浮動小数点演算は[丸め誤差](https://ja.wikipedia.org/wiki/%E8%AA%A4%E5%B7%AE#%E4%B8%B8%E3%82%81%E8%AA%A4%E5%B7%AE)が発生するため、演算結果が同じかどうかを判定する際に `==` による厳密に同じかどうかの比較は普通行いません。
|
2
2
|
|
3
3
|
numpy でしたら [numpy.allclose](https://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html) でおおよそ同じかどうかの比較が行えるので、こちらで判定するのがよいと思います。
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
## 追記
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
こちらで下記のコードで確認しましたが、バッチサイズによらず結果は一致しました。
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
```python
|
16
|
+
|
17
|
+
import numpy as np
|
18
|
+
|
19
|
+
from PIL import Image
|
20
|
+
|
21
|
+
from tensorflow.keras.applications import Xception
|
22
|
+
|
23
|
+
from tensorflow.keras.models import Model
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
# Xceptionモデル構築
|
28
|
+
|
29
|
+
model = Xception(include_top=True, weights="imagenet", input_shape=(299, 299, 3))
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
img = Image.open("sample.jpg").resize((299, 299))
|
34
|
+
|
35
|
+
img = np.float32(img) / 255
|
36
|
+
|
37
|
+
image_data = np.array([img for i in range(100)])
|
38
|
+
|
39
|
+
print(image_data.shape)
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
p1 = model.predict(image_data, batch_size=1)
|
44
|
+
|
45
|
+
p2 = model.predict(image_data, batch_size=32)
|
46
|
+
|
47
|
+
print(np.allclose(p1, p2))
|
48
|
+
|
49
|
+
```
|