You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apple M4芯片上TensorFlow非线性(Sigmoid)神经网络分类结果异常

TensorFlow在Apple M芯片上非线性分类结果异常问题

我使用TensorFlow进行Sigmoid非线性神经网络分类时,出现结果异常的情况,怀疑是Apple M芯片或环境配置导致。已尝试miniforge、miniconda、conda等多种环境版本,并在conda环境中安装了tensorflow-macos和tensorflow-metal。

系统环境

  • MacBook Pro(Apple M4芯片),系统Sequoia 15.1.1
  • Python平台:macOS-15.1.1-arm64-arm-64bit
  • TensorFlow版本:2.16.2
  • Keras版本:3.7.0
  • Python版本:3.10.16 | conda-forge打包 | (main, Dec 5 2024, 14:20:01) [Clang 18.1.8 ]
  • Pandas版本:2.2.3
  • Scikit-learn版本:1.5.2
  • GPU可用

结果差异

本地Jupyter和Google Colab运行完全相同的代码,得到的分类结果不一致:

  • Google Colab分类结果:Google Colab分类结果
  • 本地Jupyter分类结果:本地Jupyter分类结果

可视化函数(来自课程,其他用户无使用问题)

def plot_decision_boundary(model, X, y):
  """
  绘制模型在X上预测的决策边界。
  本函数改编自两个优质资源:
   1. CS231n - https://cs231n.github.io/neural-networks-case-study/
   2. Made with ML basics - https://github.com/GokuMohandas/MadeWithML/blob/main/notebooks/08_Neural_Networks.ipynb
  """
  # 定义绘图的轴边界并创建网格
  x_min, x_max = X[:, 0].min() - 0.1, X[:, 0].max() + 0.1
  y_min, y_max = X[:, 1].min() - 0.1, X[:, 1].max() + 0.1
  xx, yy = np.meshgrid(np.linspace(x_min, x_max, 100),
                       np.linspace(y_min, y_max, 100))

  # 创建用于预测的X值
  x_in = np.c_[xx.ravel(), yy.ravel()] # 堆叠二维数组:https://numpy.org/devdocs/reference/generated/numpy.c_.html

  # 使用训练好的模型进行预测
  y_pred = model.predict(x_in)

  # 检查是否为多分类任务
  if model.output_shape[-1] > 1: # 检查模型输出形状的最后一维,若大于1则为多分类
    print("执行多分类任务...")
    # 重塑预测结果以准备绘图
    y_pred = np.argmax(y_pred, axis=1).reshape(xx.shape)
  else:
    print("执行二分类任务...")
    y_pred = np.round(np.max(y_pred, axis=1)).reshape(xx.shape)

  # 绘制决策边界
  plt.contourf(xx, yy, y_pred, cmap=plt.cm.RdYlBu, alpha=0.7)
  plt.scatter(X[:, 0], X[:, 1], c=y, s=40, cmap=plt.cm.RdYlBu)
  plt.xlim(xx.min(), xx.max())
  plt.ylim(yy.min(), yy.max())

神经网络代码

tf.random.set_seed(42)

model3 = tf.keras.Sequential([
    tf.keras.layers.Dense(12, activation="relu"),
    tf.keras.layers.Dense(8, activation="relu"),
    tf.keras.layers.Dense(1, activation="sigmoid")
])

model3.compile(
    loss = tf.keras.losses.BinaryCrossentropy(),
    optimizer= tf.keras.optimizers.Adam(learning_rate=0.01),
    metrics = ["accuracy"]
)

history = model3.fit(X, y, epochs=100)

内容的提问来源于stack exchange,提问作者Marco Feregrino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 19:03:15