无法将符号张量(第2_target: 0)转换为数字数组

我尝试传递2个损失函数到一个模型作为 Kera 允许这样。

损失: 字符串(目标函数的名称)或目标函数或 如果模型有多个输出,您可以 通过 < strong > 传递字典或列表,在每个输出上使用不同的损失 的损失 。将被模型最小化的损失值将 那就是所有个人损失的总和。

两个损失函数:

def l_2nd(beta):
def loss_2nd(y_true, y_pred):
...
return K.mean(t)


return loss_2nd

还有

def l_1st(alpha):
def loss_1st(y_true, y_pred):
...
return alpha * 2 * tf.linalg.trace(tf.matmul(tf.matmul(Y, L, transpose_a=True), Y)) / batch_size


return loss_1st

然后我建立模型:

l2 = K.eval(l_2nd(self.beta))
l1 = K.eval(l_1st(self.alpha))
self.model.compile(opt, [l2, l1])

当我训练时,它会产生错误:

1.15.0-rc3 WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/ops/resource_variable_ops.py:1630:
calling BaseResourceVariable.__init__ (from
tensorflow.python.ops.resource_variable_ops) with constraint is
deprecated and will be removed in a future version. Instructions for
updating: If using Keras pass *_constraint arguments to layers.
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call
last) <ipython-input-20-298384dd95ab> in <module>()
47                          create_using=nx.DiGraph(), nodetype=None, data=[('weight', int)])
48
---> 49     model = SDNE(G, hidden_size=[256, 128],)
50     model.train(batch_size=100, epochs=40, verbose=2)
51     embeddings = model.get_embeddings()


10 frames <ipython-input-19-df29e9865105> in __init__(self, graph,
hidden_size, alpha, beta, nu1, nu2)
72         self.A, self.L = self._create_A_L(
73             self.graph, self.node2idx)  # Adj Matrix,L Matrix
---> 74         self.reset_model()
75         self.inputs = [self.A, self.L]
76         self._embeddings = {}


<ipython-input-19-df29e9865105> in reset_model(self, opt)


---> 84         self.model.compile(opt, loss=[l2, l1])
85         self.get_embeddings()
86


/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/training/tracking/base.py
in _method_wrapper(self, *args, **kwargs)
455     self._self_setattr_tracking = False  # pylint: disable=protected-access
456     try:
--> 457       result = method(self, *args, **kwargs)
458     finally:
459       self._self_setattr_tracking = previous_value  # pylint: disable=protected-access


NotImplementedError: Cannot convert a symbolic Tensor (2nd_target:0)
to a numpy array.

请帮帮忙,谢谢!

170964 次浏览

我找到了解决这个问题的办法:

这是因为我混合了符号张量和非符号类型,比如 numpy。比如说。不推荐使用这样的东西:

def my_mse_loss_b(b):
def mseb(y_true, y_pred):
...
a = np.ones_like(y_true) #numpy array here is not recommended
return K.mean(K.square(y_pred - y_true)) + a
return mseb

相反,你应该像这样把所有的张量都转换成符号张量:

def my_mse_loss_b(b):
def mseb(y_true, y_pred):
...
a = K.ones_like(y_true) #use Keras instead so they are all symbolic
return K.mean(K.square(y_pred - y_true)) + a
return mseb

希望这有帮助!

对我来说,问题出现在从 numpy 1.19升级到 1.20并使用 ray的 RLlib 时,该 RLlib 在内部使用 tensorflow 2.2。 简单的降级

pip install numpy==1.19.5

解决了问题; 错误不再发生。

更新(注释@codeananda) : 现在您也可以更新到解决问题的较新的 TensorFlow (2.6 +)版本(pip install -U tensorflow)。

  1. 去找水蟒导航员
  2. 查找已安装的软件包(numpy)
  3. 点击包裹旁边的绿色钩子
  4. “特定版本安装的标记”
  5. 选择版本,申请

我也犯了同样的错误。当我尝试传递我的输入层到数据增强顺序层。错误和我的代码如下所示。
错误:
NotImplementedError: Cannot convert a symbolic Tensor (data_augmentation/random_rotation_5/rotation_matrix/strided_slice:0) to a numpy array. This error may indicate that you're trying to pass a Tensor to a NumPy call, which is not supported.

产生错误的代码:


#Create data augmentation layer using the Sequential model using horizontal flipping, rotations and zoom etc.
data_augmentation = Sequential([
preprocessing.RandomFlip("horizontal"),
preprocessing.RandomRotation(0.2),
preprocessing.RandomZoom(0.2),
preprocessing.RandomHeight(0.2),
preprocessing.RandomWidth(0.2)
# preprocessing.Rescale()
], name="data_augmentation")


# Setting up the input_shape and base model, and freezing the underlying base model layers.
input_shape = (224,224,3)
base_model = tf.keras.applications.EfficientNetB0(include_top=False)
base_model.trainable=False


#Create the input layers
inputs = tf.keras.Input(shape=input_shape, name="input_layer")


#Add in data augmentation Sequential model as a layer
x = data_augmentation(inputs) #This is the line of code that generated the error.

我对生成的 Error: 的解决方案
解决方案1:
我运行的是较低版本的 Tensorflow 2.4.0。所以我卸载了它并重新安装了它以获得更高的2.6.0版本。较新的张量流版本会自动卸载并重新安装 numpy 版本(1.19.5)(如果 numpy 已经安装在您的本地机器上)。这将自动解决错误。在当前 conda 环境的终端中输入以下命令:

pip uninstall tensorflow
pip install tensorflow

解决方案2:
我想这是所有建议的解决方案中最简单的一个。在 Google colab 而不是本地机器上运行代码。Colab 将始终预先安装最新的软件包。

我试图在我的模型中添加一个 SimpleRNN 层,但是我收到了一个类似的错误(NotimplementedError: 无法将一个符号张量(SimpleRNN-1/strided _ slice: 0)转换为一个 numpy 数组)。

当我使用 Python3.8.10和所有其他需要的模块创建另一个环境时,问题就解决了。

正如其他人指出的那样,这是由于特定张量流版本和特定麻木版本之间的不兼容性造成的。

下面是我的特定环境和我安装的软件包列表:

Conda 版本4.11.0

设置工作环境的命令:

conda activate base
conda create -y --name myenv python=3.9
conda activate myenv
conda install -y tensorflow=2.4
conda install -y numpy=1.19.2
conda install -y keras

系统资讯

System:    Kernel: 5.4.0-100-generic x86_64 bits: 64 compiler: gcc v: 9.3.0
Desktop: Cinnamon 5.2.7 wm: muffin dm: LightDM Distro: Linux Mint 20.3 Una
base: Ubuntu 20.04 focal
Machine:   Type: Laptop System: LENOVO product: 20308 v: Lenovo Ideapad Flex 14 serial: <filter>
Chassis: type: 10 v: Lenovo Ideapad Flex 14 serial: <filter>
Mobo: LENOVO model: Strawberry 4A v: 31900059Std serial: <filter> UEFI: LENOVO
v: 8ACN30WW date: 12/06/2013
CPU:       Topology: Dual Core model: Intel Core i5-4200U bits: 64 type: MT MCP arch: Haswell
rev: 1 L2 cache: 3072 KiB
flags: avx avx2 lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx bogomips: 18357
Speed: 798 MHz min/max: 800/2600 MHz Core speeds (MHz): 1: 798 2: 798 3: 798 4: 799
Graphics:  Device-1: Intel Haswell-ULT Integrated Graphics vendor: Lenovo driver: i915 v: kernel
bus ID: 00:02.0 chip ID: 8086:0a16
Display: x11 server: X.Org 1.20.13 driver: modesetting unloaded: fbdev,vesa
resolution: 1366x768~60Hz
OpenGL: renderer: Mesa DRI Intel HD Graphics 4400 (HSW GT2) v: 4.5 Mesa 21.2.6
compat-v: 3.0 direct render: Yes
 

我在将暗网权重转换为 TensorFlow 模型时遇到了这个问题。 当我使用 Tensorflow v2.3(之前是 Tensorflow v2.2)创建了一个新环境,并且预装了 NumPy 时,我摆脱了这个问题。

因此,或许更新 TF 版本可以解决这个问题。

我也有同样的问题,并且解决了它。

为了找到根本原因,我用 python 3.8创建了一个新的 anaconda 环境,conda 安装了 tensorflow (安装2.4)

当我运行 Keras LSTM 代码时,它退出了

rnnmodel.add(LSTM(128, dropout=0.2, recurrent_dropout=0.2))

通过安装最新的张量流2.8修复了这个问题

pip uninstall tensorflow
pip install tensorflow

下面的配置适合我。

  • 巨蟒 = 3.8
  • 张量流 = 2.8.0

简单的事情是更新张量流,它的工作!

pip install -U tensorflow