InvalidArgumentError: 预期 'tf.Tensor(False, shape=(), dtype=bool)' 为真

Posted

技术标签:

【中文标题】InvalidArgumentError: 预期 \'tf.Tensor(False, shape=(), dtype=bool)\' 为真【英文标题】:InvalidArgumentError: Expected 'tf.Tensor(False, shape=(), dtype=bool)' to be trueInvalidArgumentError: 预期 'tf.Tensor(False, shape=(), dtype=bool)' 为真 【发布时间】:2021-04-05 14:40:24 【问题描述】:

在使用结构相似性指数比较图像之前,我使用 PCA 来减小图像的尺寸。使用 PCA 后,tf.image.ssim 报错。

我在这里比较图像而不使用 PCA。这完美 -

import numpy as np
import tensorflow as tf
import time
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data(
    path='mnist.npz'
)
start = time.time()
for i in range(1,6000):
    x_train_zero = np.expand_dims(x_train[0], axis=2)
    x_train_expanded = np.expand_dims(x_train[i], axis=2)
    print(tf.image.ssim(x_train_zero, x_train_expanded, 255))
print(time.time()-start)

我在这里应用了 PCA 来减小图像的尺寸,这样 SSIM 比较图像所需的时间更少 -

from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
x_train = x_train.reshape(60000,-1)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(x_train)
pca = PCA()
pca = PCA(n_components = 11)
X_pca = pca.fit_transform(X_scaled).reshape(60000,11,1)
start = time.time()
for i in range(1,6000):
    X_pca_zero = np.expand_dims(X_pca[0], axis=2)
    X_pca_expanded = np.expand_dims(X_pca[i], axis=2)
    print(tf.image.ssim(X_pca_zero, X_pca_expanded, 255))
print(time.time()-start)

这段代码抛出错误 - InvalidArgumentError: Expected 'tf.Tensor(False, shape=(), dtype=bool)' 为真。汇总数据:11、1、1 11

【问题讨论】:

【参考方案1】:

因此,简而言之,发生该错误是因为在tf.image.ssim 中,输入X_pca_zeroX_pca_expanded 的大小与filter_size 不匹配,如果您有filter_size=11,那么X_pca_zeroX_pca_expanded必须至少为 11x11,如何更改代码的示例:

import tensorflow as tf
import time
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data(
    path='mnist.npz'
)

x_train = x_train.reshape(60000,-1)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(x_train)
pca = PCA()
pca = PCA(n_components = 16) # or 12      ->       3, 4  filter_size=3
X_pca = pca.fit_transform(X_scaled).reshape(60000, 4, 4, 1)
start = time.time()
X_pca_zero = X_pca[0]
for i in range(1,6000):
    X_pca_expanded = X_pca[i]
    print(tf.image.ssim(X_pca_zero, X_pca_expanded, 255, filter_size=4))
print(time.time()-start)

【讨论】:

以上是关于InvalidArgumentError: 预期 'tf.Tensor(False, shape=(), dtype=bool)' 为真的主要内容,如果未能解决你的问题,请参考以下文章

InvalidArgumentError:没有注册 OpKernel 来支持 Op 'CudnnRNN'

InvalidArgumentError:拟合模型时出错

InvalidArgumentError:输入必须是向量,得到形状:[]

Tensorflow 中带有 model.fit 的 InvalidArgumentError

InvalidArgumentError: input_1:0 已输入和提取

InvalidArgumentError:不兼容的形状:[29] 与 [29,7,7,2]