Python InvalidArgumentError:重塑的输入是一个具有178802个值的张量,但请求的形状具有89401个值

Python InvalidArgumentError:重塑的输入是一个具有178802个值的张量,但请求的形状具有89401个值,python,python-3.x,tensorflow,deep-learning,Python,Python 3.x,Tensorflow,Deep Learning,我遇到了另一个无效参数错误,不确定这次的原因是什么 我创建了一个TFRecord,其中包含[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

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

我创建了一个TFRecord,其中包含[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()
我真的不知道如何调试这个

第一个打印语句(重塑的_image.shape)打印出 (299)形状,所以不确定问题出在哪里


多谢各位

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

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格式存储(在创建TFR记录时)
  • 如果图像为灰度,则可以将
    通道设置为1,或者保存TFRecords中每个图像的通道数,并从中动态获取(每个图像的通道数不同)

重塑只会沿张量维度改变比率。您的原始图像似乎不符合目标矩阵。在重塑之前缩放图像如何?缩放是什么意思?至于原始图像,在将它们写入TFrecords之前,我明确地将它们的大小调整为[299299]。那么我的原始图像不应该有299x299像素吗?谢谢,我只是想确定一下。如果图像是,比如说,全高清,重塑到目标大小将不起作用。所以问题在别处。看看它。编码没有问题吗?像解码原始图像一样,数据是JPEG格式的吗?《盗梦空间》教程展示了一个JPEG图像的例子。如果不看数据,我很难说出更多。可能是中的图像大小不正确。代码看起来不错。也许您可以打印每个
decode_raw
的长度,并查看178802何时出现,这是令人惊讶的2 x 299 x 299。@EricPlaton我在编码为字符串字节(写入TFRecords之前)时没有遇到任何问题。但是,我认为我的图像使用了不同的扩展(除了JPEG)。我想知道这是否造成了问题。我将尝试打印出
decode_raw
length,看看178802是否是异常值。非常感谢你的帮助。