使用 TensorFlow 进行图像分类,值错误

阿蒂夫·阿里

我是深度学习和 tensorflow 的新手,我正在尝试使用 tensorflow 创建一个图像分类器,该分类器将对 5 类图像进行分类。我的训练数据集是 25000 张图像,测试数据集是 5000 张图像。下面是我的代码:

import os
from random import shuffle

import cv2
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
import tflearn
from tflearn.layers.conv import conv_2d, max_pool_2d
from tflearn.layers.core import input_data, dropout, fully_connected
from tflearn.layers.estimator import regression
from tqdm import tqdm
import keras
from keras.models import save_model
"""from keras.models import Sequential
from keras.layers import Dense"""

TRAIN_DIR = 'train'
TEST_DIR = 'test'
IMG_SIZE = 16
LR = 1e-3
MODEL_NAME = 'cifar 10 -convnet'

def create_label(image_name):
    """ Create an one-hot encoded vector from image name """
    word_label = image_name.split('.')[0:2]
    if word_label == 'cat':
        return np.array([1,0,0,0,0])
    elif word_label == 'Dog':
        return np.array([0,1,0,0,0])
    elif word_label == 'Automobile':
        return np.array([0,0,1,0,0])
    elif word_label == 'Airplane':
        return np.array([0,0,0,1,0])
    elif word_label == 'Ship':
        return np.array([0,0,0,0,1])


def create_train_data():
    training_data = []
    for img in tqdm(os.listdir(TRAIN_DIR)):
        path = os.path.join(TRAIN_DIR, img)
        img_data = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
        img_data = cv2.resize(img_data, (IMG_SIZE, IMG_SIZE))
        training_data.append([np.array(img_data), create_label(img)])
    shuffle(training_data)
    np.save('train_data.npy', training_data)
    return training_data


def create_test_data():
    testing_data = []
    for img in tqdm(os.listdir(TEST_DIR)):
        path = os.path.join(TEST_DIR, img)
        img_num = img.split('.')[0:2]
        img_data = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
        img_data = cv2.resize(img_data, (IMG_SIZE, IMG_SIZE))
        testing_data.append([np.array(img_data), img_num])

    shuffle(testing_data)
    np.save('test_data.npy', testing_data)
    return testing_data


# If dataset is not created:
train_data = create_train_data()
test_data = create_test_data()
# If you have already created the dataset:
# train_data = np.load('train_data.npy')
# test_data = np.load('test_data.npy')
train = train_data[:25000]
test = train_data[:5000]
X_train = np.array([i[0] for i in train]).reshape(-1, IMG_SIZE, IMG_SIZE, 1)
y_train = [i[1] for i in train]
X_test = np.array([i[0] for i in test]).reshape(-1, IMG_SIZE, IMG_SIZE, 1)
y_test = [i[1] for i in test]

# Building The Model

tf.reset_default_graph()
convnet = input_data(shape=[None, IMG_SIZE, IMG_SIZE, 1], name='input')
convnet = conv_2d(convnet, 32, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)
convnet = conv_2d(convnet, 64, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)
convnet = conv_2d(convnet, 128, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)
convnet = conv_2d(convnet, 64, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)
convnet = conv_2d(convnet, 32, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)
convnet = fully_connected(convnet, 1024, activation='relu')
convnet = dropout(convnet, 0.8)
convnet = fully_connected(convnet, 2, activation='softmax')
convnet = regression(convnet, optimizer='adam', learning_rate=LR, loss='categorical_crossentropy', name='targets')
model = tflearn.DNN(convnet, tensorboard_dir='log', tensorboard_verbose=0)
history = model.fit({'input': X_train}, {'targets': y_train}, n_epoch=25,
          validation_set=({'input': X_test}, {'targets': y_test}),
          snapshot_step=500, show_metric=True, run_id=MODEL_NAME)

#print(history.history.keys())
#plt.figure(1)

# summarize history for accuracy

"""plt.subplot(211)
plt.plot(history.history['acc'])
plt.plot(history.history['val_acc'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test1'], loc='upper left')
plt.show()"""

fig = plt.figure(figsize=(25, 12))

for num, data in enumerate(test_data[:25]):

    img_num = data[1]
    img_data = data[0]

    y = fig.add_subplot(5, 5, num + 1)
    orig = img_data
    data = img_data.reshape(IMG_SIZE, IMG_SIZE, 1)
    model_out = model.predict([data])[0]

    if np.argmax(model_out) == 1:
        str_label = 'Dog'
    if np.argmax(model_out) == 2:
        str_label = 'Automobile'
    if np.argmax(model_out) == 3:
        str_label = 'Airplane'
    if np.argmax(model_out) == 4:
        str_label = 'Ship'
    else:
        str_label = 'Cat'

    y.imshow(orig, cmap='gray')
    plt.title(str_label)
    y.axes.get_xaxis().set_visible(False)
    y.axes.get_yaxis().set_visible(False)
plt.show()

我收到以下错误:ValueError:无法为 Tensor 'targets/Y:0' 提供形状 (64,) 的值,其形状为 '(?, 2)'

有人可以帮我弄这个吗?提前致谢。

D_negn

问题是与您的标签的形状,所以检查的形状y_trainy_test它们都必须具有与模型输出相似的形状,该形状在错误处显示...which has shape '(?, 2)'并在您创建最后一个完全连接层的行中定义convnet = fully_connected(convnet, 2, activation='softmax')

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 tensorflow 进行基本图像分类

来自分类Dev

如何使用彩色图像进行 Tensorflow 图像分类?

来自分类Dev

如何使用tensorflow对图像进行分类和裁剪?

来自分类Dev

如何使用tensorflow的图像分类教程对不在原始训练或验证数据集中的看不见的图像进行分类?

来自分类Dev

使用TensorFlow对图像中的点进行插值采样

来自分类Dev

TensorFlow:如何对多个图像进行图像分类

来自分类Dev

使用我自己的数据进行文本分类的Tensorflow错误

来自分类Dev

使用TensorFlow进行图像识别

来自分类Dev

使用 tensorflow 解码图像

来自分类Dev

使用TensorFlow进行多标签文本分类

来自分类Dev

使用我自己的数据进行Tensorflow错误

来自分类Dev

TensorFlow图像分类

来自分类Dev

TensorFlow:分类图像

来自分类Dev

Tensorflow图像分类脚本

来自分类Dev

使用gbm()进行分类-错误

来自分类常见问题

使用TensorFlow模型进行预测

来自分类Dev

使用Docker进行Tensorflow服务

来自分类Dev

使用Tensorflow读取的OpenCV图像进行可视化

来自分类Dev

使用TensorFlow.js从图像进行对象计数

来自分类Dev

使用TensorFlow和Keras进行单类图像识别

来自分类Dev

在 tensorflow 中使用立体图像进行批量学习

来自分类Dev

使用TensorFlow概率学习分类变量

来自分类Dev

使用Watson Image Recognition对图像进行“分类”

来自分类Dev

使用SVM和BOW进行图像分类?

来自分类Dev

图像分类和 tensorflow 服务

来自分类Dev

使用TensorFlow对没有验证标签的手写数字进行分类

来自分类Dev

使用mobilenet和blazeface进行Tensorflow js服务器端分类

来自分类Dev

如何在 Android 上使用 Tensorflow 对来自互联网的照片进行分类

来自分类Dev

使用 Tensorflow.js 加载 Mobilenet 模型并在 express 中间件中进行分类

Related 相关文章

  1. 1

    使用 tensorflow 进行基本图像分类

  2. 2

    如何使用彩色图像进行 Tensorflow 图像分类?

  3. 3

    如何使用tensorflow对图像进行分类和裁剪?

  4. 4

    如何使用tensorflow的图像分类教程对不在原始训练或验证数据集中的看不见的图像进行分类?

  5. 5

    使用TensorFlow对图像中的点进行插值采样

  6. 6

    TensorFlow:如何对多个图像进行图像分类

  7. 7

    使用我自己的数据进行文本分类的Tensorflow错误

  8. 8

    使用TensorFlow进行图像识别

  9. 9

    使用 tensorflow 解码图像

  10. 10

    使用TensorFlow进行多标签文本分类

  11. 11

    使用我自己的数据进行Tensorflow错误

  12. 12

    TensorFlow图像分类

  13. 13

    TensorFlow:分类图像

  14. 14

    Tensorflow图像分类脚本

  15. 15

    使用gbm()进行分类-错误

  16. 16

    使用TensorFlow模型进行预测

  17. 17

    使用Docker进行Tensorflow服务

  18. 18

    使用Tensorflow读取的OpenCV图像进行可视化

  19. 19

    使用TensorFlow.js从图像进行对象计数

  20. 20

    使用TensorFlow和Keras进行单类图像识别

  21. 21

    在 tensorflow 中使用立体图像进行批量学习

  22. 22

    使用TensorFlow概率学习分类变量

  23. 23

    使用Watson Image Recognition对图像进行“分类”

  24. 24

    使用SVM和BOW进行图像分类?

  25. 25

    图像分类和 tensorflow 服务

  26. 26

    使用TensorFlow对没有验证标签的手写数字进行分类

  27. 27

    使用mobilenet和blazeface进行Tensorflow js服务器端分类

  28. 28

    如何在 Android 上使用 Tensorflow 对来自互联网的照片进行分类

  29. 29

    使用 Tensorflow.js 加载 Mobilenet 模型并在 express 中间件中进行分类

热门标签

归档