TensorFlow 2.5.0与NumPy 1.21+不兼容?(2021-10-05)
问题描述
给每一个偶然发现这一点的人:
我最近在做图像分类(将CNN添加到一些已标记的数据上),我想使用KERAS的模块进行数据增强。但是,我抛出了一个NotImplementedError。更具体地说,它逐字如下:
NotImplementedError:无法将符号张量(sequential_3/sequential/random_rotation/rotation_matrix/strided_slice:0)转换为数字数组。此错误可能表示您正试图将张量传递给不受支持的NumPy调用
以下是我为增强层编写的代码:
angle = 15
data_augmentation = keras.Sequential([
layers.experimental.preprocessing.RandomFlip('horizontal'),
layers.experimental.preprocessing.RandomRotation(angle/360)
])
所以我想要水平翻转我所有的图像并随机旋转15度。我直接把这条信息输入我的CNN:
layers_2 = [
#image augmentation layer
data_augmentation,
#convolution layer
keras.layers.Conv2D(16, 3, padding = 'same', activation = 'relu'),
keras.layers.MaxPooling2D(),
keras.layers.Conv2D(32, 3, padding = 'same', activation = 'relu'),
keras.layers.MaxPooling2D(),
keras.layers.Conv2D(64, 3, padding = 'same', activation = 'relu'),
keras.layers.MaxPooling2D(),
keras.layers.Flatten(),
#dropout for regularization
keras.layers.Dropout(0.2),
#MLP layer
keras.layers.Dense(128, activation = 'relu'),
keras.layers.Dense(64, activation = 'relu'),
keras.layers.Dense(3, activation = 'softmax')
]
model_2 = keras.Sequential(layers_2)
model_2.compile(optimizer = tf.optimizers.Adam(),
loss = tf.keras.losses.SparseCategoricalCrossentropy(),
metrics = [tf.metrics.SparseCategoricalAccuracy()]
)
epochs_2 = 15
#fitting
history_2 = model_2.fit(
normalized_train_ds,
validation_data = normalized_val_ds,
epochs = epochs_2
)
其中Normalized_Train_DS和Normalized_Val_DS都是规范化的tensorflow.data.Dataset对象。
必要的上下文:我在我的本地机器上,在配置了Python3.9.7的环境中运行它。我的NumPy版本是1.21.2,我的TensorFlow版本是2.5.0。早在2021年2月,我就遇到过类似的问题,只是他们注意到运行Python3.9.1和TensorFlow 2.4.1,以及NumPy 1.20+的人出现了同样的问题(该问题的链接:https://github.com/tensorflow/tensorflow/issues/47360)。
实际问题:我只是写了一些糟糕的代码,还是我的版本的Python、TensorFlow、NumPy不兼容?我试着安装了之前版本的NumPy(1.20+),但它抛出了同样的问题。如果我在Google Colab笔记本上运行它,这就不再是问题了。
解决方案
根据GitHub上的此问题,TensorFlow2.5和NumPy 1.20+不兼容。 https://github.com/tensorflow/tensorflow/issues/47691
相关文章