I am have a keras model that is supposed to take a (150, 150, 1)
grayscale image as it’s input and output an array of length 8.
Here is my model code:
JavaScript
x
10
10
1
from tensorflow.python import keras
2
model = keras.Sequential([
3
keras.layers.Conv2D(filters=32, kernel_size=(3,3), activation="relu", padding='same', input_shape=(150,150,1)),
4
keras.layers.MaxPool2D(pool_size=(2,2), padding='same', data_format='channels_last'),
5
keras.layers.Conv2D(filters=64, kernel_size=(3,3), activation='relu', padding='same'),
6
keras.layers.MaxPool2D(pool_size=(2,2), padding='same', data_format='channels_last'),
7
keras.layers.Flatten(),
8
keras.layers.Dense(8, activation="softmax")
9
])
10
When I try to use the .predict()
method, I get this error:
JavaScript
1
17
17
1
Traceback (most recent call last):
2
File "KerasCNN.py", line 152, in <module>
3
ga.run()
4
File "/home/User/Documents/Projects/2022/Keras_CNN/Trial1/env/lib/python3.6/site-packages/pygad/pygad.py", line 1192, in run
5
self.last_generation_fitness = self.cal_pop_fitness()
6
File "/home/User/Documents/Projects/2022/Keras_CNN/Trial1/env/lib/python3.6/site-packages/pygad/pygad.py", line 1159, in cal_pop_fitness
7
fitness = self.fitness_func(sol, sol_idx)
8
File "KerasCNN.py", line 112, in fitness
9
prediction = model.predict(g_img)
10
File "/home/User/Documents/Projects/2022/Keras_CNN/Trial1/env/lib/python3.6/site-packages/tensorflow/python/keras/_impl/keras/models.py", line 966, in predict
11
return self.model.predict(x, batch_size=batch_size, verbose=verbose)
12
File "/home/User/Documents/Projects/2022/Keras_CNN/Trial1/env/lib/python3.6/site-packages/tensorflow/python/keras/_impl/keras/engine/training.py", line 1813, in predict
13
f, ins, batch_size=batch_size, verbose=verbose, steps=steps)
14
File "/home/User/Documents/Projects/2022/Keras_CNN/Trial1/env/lib/python3.6/site-packages/tensorflow/python/keras/_impl/keras/engine/training.py", line 1300, in _predict_loop
15
index_array = np.arange(num_samples)
16
TypeError: unsupported operand type(s) for /: 'Dimension' and 'int'
17
I had an ANN (non-CNN) model running earlier that was working fine. When I did some research I could find anything about this error either.
Here is the code I am using to make the prediction:
JavaScript
1
6
1
img = get_image() # (150, 150, 3)
2
g_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # (150, 150, 1)
3
g_img = tf.expand_dim(g_img, axis=0)
4
g_img = tf.expand_dim(g_img, axis=-1) # (1, 150, 150, 1)
5
prediction = model.predict(g_img)
6
Here are my version numbers:
tensorflow: 1.5.0
python: 3.69
numpy: 1.19.5
Ubuntu: 18.04
Let me know if theres any other info I can provide! Thanks!
Answer
Replacing tf.expand_dim()
with np.expand_dim()
fixed it!
Advertisement
Answer
This seems to run perfectly fine on TF 1.15:
JavaScript
1
25
25
1
import cv2
2
import numpy as np
3
import tensorflow as tf
4
from tensorflow.python import keras
5
print(tf.__version__)
6
model = keras.Sequential([
7
keras.layers.Conv2D(filters=32, kernel_size=(3,3), activation="relu", padding='same', input_shape=(150,150,1)),
8
keras.layers.MaxPool2D(pool_size=(2,2), padding='same', data_format='channels_last'),
9
keras.layers.Conv2D(filters=64, kernel_size=(3,3), activation='relu', padding='same'),
10
keras.layers.MaxPool2D(pool_size=(2,2), padding='same', data_format='channels_last'),
11
keras.layers.Flatten(),
12
keras.layers.Dense(8, activation="softmax")
13
])
14
# Create random image
15
img = np.zeros([150,150,3], dtype=np.uint8)
16
img[:,:,0] = np.ones([150,150])*64
17
img[:,:,1] = np.ones([150,150])*128
18
img[:,:,2] = np.ones([150,150])*192
19
20
g_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
21
g_img = np.expand_dims(g_img, axis=0)
22
g_img = np.expand_dims(g_img, axis=-1) # (1, 150, 150, 1)
23
prediction = model.predict(g_img)
24
print(prediction.shape)
25
JavaScript
1
3
1
1.15.2
2
(1, 8)
3