M1芯片MacOS系统下TensorFlow 2.5.0运行文本分类代码异常咨询
M1芯片MacOS运行IMDB文本分类TensorFlow代码异常问题及解决方案
问题背景
在搭载M1芯片的MacOS BigSur(版本11.2.3)系统上运行François Chollet所著《深度学习》中的文本分类代码,使用TensorFlow版本为2.5.0,代码如下:
import tensorflow as tf from tensorflow.keras import layers from tensorflow.keras.datasets import imdb from tensorflow.keras.preprocessing import sequence max_features = 2000 max_len = 500 (x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features) x_train = sequence.pad_sequences(x_train, maxlen=max_len) x_test = sequence.pad_sequences(x_test, maxlen=max_len) model = keras.models.Sequential() model.add(layers.Embedding(max_features, 128,input_length=max_len,name='embed')) model.add(layers.Conv1D(32, 7, activation='relu')) model.add(layers.MaxPooling1D(5)) model.add(layers.Conv1D(32, 7, activation='relu')) model.add(layers.GlobalMaxPooling1D()) model.add(layers.Dense(1)) model.summary() model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['acc']) callbacks=[tf.keras.callbacks.TensorBoard(log_dir='my_log_dir',histogram_freq=1,embeddings_freq=1,)] history = model.fit(x_train, y_train, epochs=20, batch_size=128, validation_split=0.2,callbacks=callbacks)
出现的问题
- 训练输出的准确率和损失值异常偏高,相同代码在Windows 10系统运行结果完全不同
- 更换Adam优化器运行时,会弹出Kernel appears to have died的内核崩溃提示
- 运行过程中会弹出粉色框标注的警告信息,需要屏蔽方法
解决方案
1. 准确率/损失异常问题
TensorFlow 2.5.0对M1芯片的原生支持存在严重兼容缺陷,该版本发布时苹果尚未推出正式适配的tensorflow-metal插件,arm64架构下数值计算精度逻辑和x86平台不一致,导致结果异常,解决步骤:
- 升级系统到MacOS 12.3及以上版本
- 卸载原有TensorFlow,配置arm64架构的conda环境后,执行
conda install tensorflow-macos tensorflow-metal安装苹果官方适配的TensorFlow版本 - 修复原代码笔误:将
model = keras.models.Sequential()修改为model = tf.keras.models.Sequential(),补全前缀避免导入异常引发的未知错误
2. Adam优化器内核崩溃问题
该问题是M1早期TensorFlow版本的已知BUG,Adam优化器的底层运算在arm64架构下会触发内存访问错误,解决方法:
- 完成上述适配版TensorFlow安装后即可直接解决该问题
- 若暂时无法升级版本,可将batch_size从128下调到32或64,降低内存占用也可大概率避免崩溃
3. 屏蔽警告信息问题
将以下代码添加到所有导入语句的最前方,即可过滤TensorFlow相关警告:
import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' import warnings warnings.filterwarnings('ignore')
TF_CPP_MIN_LOG_LEVEL设为2代表只输出错误信息,自动过滤info和warning级别的日志。
内容的提问来源于stack exchange,提问作者Syeda
相关产品推荐
相关产品推荐

