我有一个keras模型,它应该以(150, 150, 1)灰度图像作为输入,并输出一个长度为8的array.

以下是我的模型代码:

from tensorflow.python import keras
model = keras.Sequential([
    keras.layers.Conv2D(filters=32, kernel_size=(3,3), activation="relu", padding='same', input_shape=(150,150,1)),
    keras.layers.MaxPool2D(pool_size=(2,2), padding='same', data_format='channels_last'),
    keras.layers.Conv2D(filters=64, kernel_size=(3,3), activation='relu', padding='same'),
    keras.layers.MaxPool2D(pool_size=(2,2), padding='same', data_format='channels_last'),
    keras.layers.Flatten(),
    keras.layers.Dense(8, activation="softmax")
])

当我try 使用.predict()方法时,会出现以下错误:

Traceback (most recent call last):
  File "KerasCNN.py", line 152, in <module>
    ga.run()
  File "/home/User/Documents/Projects/2022/Keras_CNN/Trial1/env/lib/python3.6/site-packages/pygad/pygad.py", line 1192, in run
    self.last_generation_fitness = self.cal_pop_fitness()
  File "/home/User/Documents/Projects/2022/Keras_CNN/Trial1/env/lib/python3.6/site-packages/pygad/pygad.py", line 1159, in cal_pop_fitness
    fitness = self.fitness_func(sol, sol_idx)
  File "KerasCNN.py", line 112, in fitness
    prediction = model.predict(g_img)
  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
    return self.model.predict(x, batch_size=batch_size, verbose=verbose)
  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
    f, ins, batch_size=batch_size, verbose=verbose, steps=steps)
  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
    index_array = np.arange(num_samples)
TypeError: unsupported operand type(s) for /: 'Dimension' and 'int'

我之前有一个ANN(非CNN)的模型运行得很好.当我做一些研究时,我也能找到关于这个错误的任何信息.

下面是我用来做预测的代码:

img = get_image() # (150, 150, 3)
g_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # (150, 150, 1)
g_img = tf.expand_dim(g_img, axis=0)
g_img = tf.expand_dim(g_img, axis=-1) # (1, 150, 150, 1)
prediction = model.predict(g_img)

以下是我的版本号:

tensorflow:1.5.0

Python :3.69

努比:1.19.5

Ubuntu:18.04

让我知道如果有任何其他信息我可以提供!谢谢

Answer

np.expand_dim()替换tf.expand_dim()修复了它!

推荐答案

这似乎在TF 1.15上运行得非常好:

import cv2
import numpy as np
import tensorflow as tf
from tensorflow.python import keras
print(tf.__version__)
model = keras.Sequential([
    keras.layers.Conv2D(filters=32, kernel_size=(3,3), activation="relu", padding='same', input_shape=(150,150,1)),
    keras.layers.MaxPool2D(pool_size=(2,2), padding='same', data_format='channels_last'),
    keras.layers.Conv2D(filters=64, kernel_size=(3,3), activation='relu', padding='same'),
    keras.layers.MaxPool2D(pool_size=(2,2), padding='same', data_format='channels_last'),
    keras.layers.Flatten(),
    keras.layers.Dense(8, activation="softmax")
])
# Create random image
img = np.zeros([150,150,3], dtype=np.uint8)
img[:,:,0] = np.ones([150,150])*64
img[:,:,1] = np.ones([150,150])*128
img[:,:,2] = np.ones([150,150])*192

g_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
g_img = np.expand_dims(g_img, axis=0)
g_img = np.expand_dims(g_img, axis=-1) # (1, 150, 150, 1)
prediction = model.predict(g_img)
print(prediction.shape)
1.15.2
(1, 8)

Python相关问答推荐

使用unmanagedexports从Python调用的c#DLC

如何最好地处理严重级联的json

在Python中是否可以输入使用任意大小参数列表的第一个元素的函数

预期LP_c_Short实例而不是_ctyles.PyCStructType

Docker-compose:为不同项目创建相同的容器

避免循环的最佳方法

创建带有二维码的Flask应用程序,可重定向到特定端点

Matplotlib轮廓线值似乎不对劲

数字梯度的意外值

Odoo -无法比较使用@api.depends设置计算字段的日期

LAB中的增强数组

仅从风格中获取 colored颜色 循环

根据另一列中的nan重置值后重新加权Pandas列

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

数据抓取失败:寻求帮助

如何在Python数据框架中加速序列的符号化

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

实现自定义QWidgets作为QTimeEdit的弹出窗口

Pandas Loc Select 到NaN和值列表

如何在Python中使用Pandas将R s Tukey s HSD表转换为相关矩阵''