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