python - InvalidArgumentError : Input to reshape is a tensor with 178802 values, 但请求的形状有 89401

标签 python python-3.x tensorflow deep-learning

我遇到了另一个无效参数错误,但不确定这次是什么原因。

我创建了一个 TFRecord,其中包含形状为 [299,299] 的图像(据我所知是混合扩展名)。

我正在尝试批量加载图像,但我遇到了这个错误:

'InvalidArgumentError (see above for traceback): Input to reshape is a tensor with 178802 values, but the requested shape has 89401
     [[Node: Reshape = Reshape[T=DT_FLOAT, Tshape=DT_INT32, _device="/job:localhost/replica:0/task:0/cpu:0"](DecodeRaw, Reshape/shape)]]

这是我的代码:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import os

IMAGE_DIR =r'C:\Users\Moondra\Desktop\TF_FISH_PROJECT\FINAL_FISHES'

data_path = r'E:\TFRECORDS\normal_fish_conversion_2.tfrecords'  

with tf.Session() as sess:
    feature = {'train/image': tf.FixedLenFeature([], tf.string),
               'train/label': tf.FixedLenFeature([], tf.int64),
               'rows':  tf.FixedLenFeature([], tf.int64),
                'columns':  tf.FixedLenFeature([], tf.int64)}

    # Create a list of filenames and pass it to a queue
    filename_queue = tf.train.string_input_producer([data_path], num_epochs=1000)

    # Define a reader and read the next record
    reader = tf.TFRecordReader()
    _, serialized_example = reader.read(filename_queue)

    # Decode the record read by the reader
    features = tf.parse_single_example(serialized_example, features=feature)

    # Convert the image data from string back to the numbers
    image = tf.decode_raw(features['train/image'], tf.float32)

    # Cast label data into int32
    label = tf.cast(features['train/label'], tf.int32)

    # Reshape image data into the original shape
    image = tf.reshape(image, [299, 299])
    print(image.shape) #shape is printing out correctly


    # Creates batches by randomly shuffling tensors
    #images, labels = tf.train.shuffle_batch([image, label], batch_size=50, capacity=10000, num_threads=3, min_after_dequeue=2000)
    init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
    sess.run(init_op)
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(coord=coord)

    for batch_index in range(5):
            img  = sess.run([image])
            img = img.astype(np.uint8)
            print(img.shape)





    coord.request_stop()
    coord.join(threads)
    sess.close()

我不太确定如何调试它..

第一个打印语句(reshaped_image.shape)打印出一个 (299,299) 形状,所以不确定是什么问题。

谢谢。

最佳答案

我需要做的是将图像解码为 JPEG,将其转换为 float ,扩展其尺寸,然后使用双线性插值调整其大小,如下所示:

image = tf.image.decode_jpeg(features['train/image'], channels=3)
image = tf.image.convert_image_dtype(image, dtype=tf.float32)
image = tf.expand_dims(image, 0)
image = tf.image.resize_bilinear(image, [299, 299], align_corners=False)

注意:

  • 您的图像应该已经以 JPEG 格式存储(在创建 TFRecords 时)。
  • 如果您的图像是灰度图像,您可以改为将 channels 设置为 1,或者将每张图像的 channel 数保存在 TFRecords 中并从那里动态获取(每张图像都不同)。<

关于python - InvalidArgumentError : Input to reshape is a tensor with 178802 values, 但请求的形状有 89401,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47362296/

相关文章:

Python argparse 示例?

tensorflow - 使用 tf.image.resize_images 后我的图片变成了可怕的图片

python - Flask 登录 - is_authenticated 和 is_anonymous 不反射(reflect)登录/注销

python - 通过pywin32将pandas数据框写入word文档表

Python CGI 脚本 : OSError: [Errno 8] Exec format error

python - 类型错误 : unsupported operand type(s) for +: 'Timestamp' and 'float'

python - 在 python 3 中解码 base64 字符串(是否使用 lxml)

Python3 PyQt5 setEnabled 的 QAction 导致崩溃

python - Tensorflow tf.train.Saver 不保存所有变量

tensorflow - 我正在尝试使用 Mask RCNN 构建对象检测,但在调用 MaskRCNN 方法时出现错误