teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

d

2019/12/05 06:43

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -3,9 +3,6 @@
3
3
 
4
4
  ## 追記
5
5
 
6
- こちらで下記のコードで確認しましたが、バッチサイズによらず結果は一致しました。
7
- なお、Tensorflow に付属している Keras を使ってます。
8
-
9
6
  ```python
10
7
  import numpy as np
11
8
  from PIL import Image
@@ -17,10 +14,16 @@
17
14
 
18
15
  img = Image.open("sample.jpg").resize((299, 299))
19
16
  img = np.float32(img) / 255
20
- image_data = np.array([img for i in range(100)])
17
+ image_data = np.array([img for i in range(50)])
21
- print(image_data.shape)
22
18
 
19
+ base_model = Xception(include_top=True, weights="imagenet", input_shape=(299, 299, 3))
20
+ for i in range(100):
21
+ model = Model(inputs=base_model.input, outputs=base_model.layers[i + 2].output)
22
+
23
- p1 = model.predict(image_data, batch_size=1)
23
+ p1 = model.predict(image_data, batch_size=1)
24
- p2 = model.predict(image_data, batch_size=32)
24
+ p2 = model.predict(image_data, batch_size=32)
25
- print(np.allclose(p1, p2))
25
+ if not np.allclose(p1, p2, rtol=1e-03):
26
+ print(p1.ravel()[:10])
27
+ print(p2.ravel()[:10])
28
+ break
26
29
  ```

2

d

2019/12/05 06:43

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -4,6 +4,7 @@
4
4
  ## 追記
5
5
 
6
6
  こちらで下記のコードで確認しましたが、バッチサイズによらず結果は一致しました。
7
+ なお、Tensorflow に付属している Keras を使ってます。
7
8
 
8
9
  ```python
9
10
  import numpy as np

1

d

2019/12/05 06:02

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -1,2 +1,25 @@
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
- numpy でしたら [numpy.allclose](https://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html) でおおよそ同じかどうかの比較が行えるので、こちらで判定するのがよいと思います。
2
+ numpy でしたら [numpy.allclose](https://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html) でおおよそ同じかどうかの比較が行えるので、こちらで判定するのがよいと思います。
3
+
4
+ ## 追記
5
+
6
+ こちらで下記のコードで確認しましたが、バッチサイズによらず結果は一致しました。
7
+
8
+ ```python
9
+ import numpy as np
10
+ from PIL import Image
11
+ from tensorflow.keras.applications import Xception
12
+ from tensorflow.keras.models import Model
13
+
14
+ # Xceptionモデル構築
15
+ model = Xception(include_top=True, weights="imagenet", input_shape=(299, 299, 3))
16
+
17
+ img = Image.open("sample.jpg").resize((299, 299))
18
+ img = np.float32(img) / 255
19
+ image_data = np.array([img for i in range(100)])
20
+ print(image_data.shape)
21
+
22
+ p1 = model.predict(image_data, batch_size=1)
23
+ p2 = model.predict(image_data, batch_size=32)
24
+ print(np.allclose(p1, p2))
25
+ ```