Python 整形的输入是一个具有128个值的张量,但请求的形状有32个[Op:Reformate]

Python 整形的输入是一个具有128个值的张量,但请求的形状有32个[Op:Reformate],python,tensorflow,keras,Python,Tensorflow,Keras,这让我有点为难。我已经尝试了几种选择,但无法使其正常工作。 我正在对自己的数据使用TF2.0 triple loss函数,但该函数无法正常工作。 我使用TF中的示例进行初始测试,这很有效 功能链接供参考: 有一点不同,我在windows上,因此无法下载和安装tensorflow插件,因此我获取了使代码正常工作所需的内容。 我使用相同的模型,并以相同的方式编译它,但仍然存在问题。 代码如下: augment = True if augment: train_datagen = ImageD

这让我有点为难。我已经尝试了几种选择,但无法使其正常工作。 我正在对自己的数据使用TF2.0 triple loss函数,但该函数无法正常工作。 我使用TF中的示例进行初始测试,这很有效

功能链接供参考:

有一点不同,我在windows上,因此无法下载和安装tensorflow插件,因此我获取了使代码正常工作所需的内容。 我使用相同的模型,并以相同的方式编译它,但仍然存在问题。 代码如下:

augment = True
if augment:
    train_datagen = ImageDataGenerator(
        rescale=1. / 255,
        shear_range=0,
        rotation_range=20,
        zoom_range=0.15,
        width_shift_range=0.2,
        height_shift_range=0.2,
        horizontal_flip=True,
        fill_mode='nearest',
        validation_split=0.20)  # set validation split
else:
    train_datagen = ImageDataGenerator(
        horizontal_flip=True,
        rescale=1. / 255,
        fill_mode='nearest',
        validation_split=0.20)  # set validation split

train_generator = train_datagen.flow_from_directory(
    DATA_PATH,
    target_size=(28,28),
    color_mode='grayscale',
    batch_size=BATCH_SIZE,
    class_mode='categorical',
    subset='training')  # set as training data

validation_generator = train_datagen.flow_from_directory(
    DATA_PATH,  # same directory as training data
    target_size=(28,28),
    color_mode='grayscale',
    batch_size=BATCH_SIZE,
    class_mode='categorical',
    subset='validation')  # set as validation data

# Build the network

model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv2D(filters=64, kernel_size=2, padding='valid', activation='relu', input_shape=(28,28, 1)))
model.add(tf.keras.layers.MaxPooling2D(pool_size=2))
model.add(tf.keras.layers.Dropout(0.3))
model.add(tf.keras.layers.Conv2D(filters=32, kernel_size=2, padding='valid', activation='relu'))
model.add(tf.keras.layers.MaxPooling2D(pool_size=2))
model.add(tf.keras.layers.Dropout(0.3))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(256, activation=None))  # No activation on final dense layer
model.add(tf.keras.layers.Lambda(lambda x: tf.math.l2_normalize(x, axis=1)))  # L2 normalize embeddings

# Compile the model
model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
          loss=triplet_semihard_loss)
一切都一样,只是数据不一样。我甚至调整数据的大小和灰度,使其与其他输入数据的形状相同

以下是全部错误:

文件“C:\Users\matthew.millar\Anaconda3\envs\TF2\lib\site packages\tensorflow\u core\python\eager\execute.py”,第67行,快速执行 六、将_从(核心状态)提升到_异常(例如代码、消息),无 文件“”,第3行,从
tensorflow.python.framework.errors\u impl.InvalidArgumentError:Reformate的输入是一个具有128个值的张量,但请求的形状有32个[Op:Reformate]tf.Reformate不会更改张量中元素总数的顺序。错误表明,您正在尝试将元素总数从128减少到32。您正在使用
tf。在
triplet\u semihard\u loss
函数中重塑

在下面的示例中,我重新创建了您的场景,其中我将
shape
参数设置为
2
,用于
tf。重塑
,它不能容纳原始张量的所有元素,因此抛出错误-

代码-

%tensorflow_version 2.x
import tensorflow as tf
t1 = tf.Variable([1,2,2,4,5,6])

t2 = tf.reshape(t1, 2)
---------------------------------------------------------------------------
InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-3-0ff1d701ff22> in <module>()
      3 t1 = tf.Variable([1,2,2,4,5,6])
      4 
----> 5 t2 = tf.reshape(t1, 2)

3 frames
/usr/local/lib/python3.6/dist-packages/six.py in raise_from(value, from_value)

InvalidArgumentError: Input to reshape is a tensor with 6 values, but the requested shape has 2 [Op:Reshape]
tf.Tensor(
[[1 2 2]
 [4 5 6]], shape=(2, 3), dtype=int32)
输出-

%tensorflow_version 2.x
import tensorflow as tf
t1 = tf.Variable([1,2,2,4,5,6])

t2 = tf.reshape(t1, 2)
---------------------------------------------------------------------------
InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-3-0ff1d701ff22> in <module>()
      3 t1 = tf.Variable([1,2,2,4,5,6])
      4 
----> 5 t2 = tf.reshape(t1, 2)

3 frames
/usr/local/lib/python3.6/dist-packages/six.py in raise_from(value, from_value)

InvalidArgumentError: Input to reshape is a tensor with 6 values, but the requested shape has 2 [Op:Reshape]
tf.Tensor(
[[1 2 2]
 [4 5 6]], shape=(2, 3), dtype=int32)
输出-

%tensorflow_version 2.x
import tensorflow as tf
t1 = tf.Variable([1,2,2,4,5,6])

t2 = tf.reshape(t1, 2)
---------------------------------------------------------------------------
InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-3-0ff1d701ff22> in <module>()
      3 t1 = tf.Variable([1,2,2,4,5,6])
      4 
----> 5 t2 = tf.reshape(t1, 2)

3 frames
/usr/local/lib/python3.6/dist-packages/six.py in raise_from(value, from_value)

InvalidArgumentError: Input to reshape is a tensor with 6 values, but the requested shape has 2 [Op:Reshape]
tf.Tensor(
[[1 2 2]
 [4 5 6]], shape=(2, 3), dtype=int32)

希望这能回答你的问题。愉快的学习。

您能添加完整的堆栈跟踪以及
三重\u半硬\u丢失吗