首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >conv2d_input应具有形状(%1,% 1)的4个维度

conv2d_input应具有形状(%1,% 1)的4个维度
EN

Stack Overflow用户
提问于 2019-06-11 02:31:37
回答 1查看 519关注 0票数 0

在我适合我的机器学习之后,我正在尝试预测一个新的机器学习。名为demo1.jpg的图像

我期望的是在我的库中添加新特性:

我的详细信息:

代码语言:javascript
复制
RTX 2080
Tensorflow 1.13.1
Cuda 10.0

我正在使用tf.keras,并且收到以下错误:

ValueError:检查输入时出错:要求conv2d_input具有4维,但得到形状为(1,1)的数组

我的完整代码:

代码语言:javascript
复制
import os
os.environ["CUDA_VISIBLE_DEVICES"]="-1"

import tensorflow as tf
import numpy as np
import pickle
import cv2
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten, Conv2D, MaxPooling2D
from tensorflow import keras

IMG_SIZE = 50

def prepare(file):
    img_array = cv2.imread(file, cv2.IMREAD_GRAYSCALE)
    new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))

    predictdata = tf.reshape(new_array, (1, 50, 50))
    predictdata = np.expand_dims(predictdata, -1)
    return predictdata


pickle_ind = open("x.pickle", "rb")
x = pickle.load(pickle_ind)
x = np.array(x, dtype=float)
x = np.expand_dims(x, -1)

pickle_ind = open("y.pickle", "rb")
y = pickle.load(pickle_ind)

n_batch = len(x)

model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(50, 50, 1)))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Flatten())
model.add(Dense(1, activation='softmax'))

model.summary()

model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])

model.fit(x, y, epochs=1, batch_size=n_batch)
prediction = model.predict([prepare('demo1.jpg')], batch_size=n_batch, steps=1, verbose=1)

print(prediction)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-11 03:22:38

执行以下更改:

代码语言:javascript
复制
def prepare(file):
    img_array = cv2.imread(file, cv2.IMREAD_GRAYSCALE)
    return np.expand_dims(cv2.resize(img_array, (IMG_SIZE, IMG_SIZE)), -1)

model.fit(x, y, epochs=1, batch_size=n_batch)
model.predict(np.array([prepare("demo1.jpg")]), batch_size=n_batch, steps=1, verbose=1)

问题: tf.reshape返回张量,而不是numpy数组。然后,expand_dims添加一个维数并返回一个单元素np数组(该元素是张量)。

而是以3D np数组的形式返回图像,然后创建一批用于预测的图像。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56531748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档