【kaggle运行项目注意事项】

kaggle运行项目注意事项

    • [✅ 解决方案:每次运行前自动准备环境](#✅ 解决方案:每次运行前自动准备环境)
      • [1. 定义一个准备函数(运行一次即可)](#1. 定义一个准备函数(运行一次即可))
      • [2. 运行其他 `ch03` 文件(如 `neuralnet_mnist.py`)](#2. 运行其他 ch03 文件(如 neuralnet_mnist.py))
      • [3. (可选)避免每次复制,直接使用 `/kaggle/input` 中的文件但修改下载缓存](#3. (可选)避免每次复制,直接使用 /kaggle/input 中的文件但修改下载缓存)
    • [📌 注意事项](#📌 注意事项)
    • [🧪 验证](#🧪 验证)

在 Kaggle Notebook 中,/kaggle/working临时工作目录 ,每次内核重启新会话启动 时,该目录都会被重置为空(仅保留当前 Notebook 产生的输出文件)。您之前复制到 /kaggle/working 下的 deep_learning_base_python-main 文件夹,在您重启内核关闭并重新打开 Notebook 后就会消失。

从您提供的输出(os.getcwd() 显示为 /kaggle/working,但 ls 列表中没有该文件夹)来看,当前会话是全新启动的,之前复制的文件已经被清空。


✅ 解决方案:每次运行前自动准备环境

您可以将复制项目 + 修改 URL 的步骤封装成一个可重复执行的代码块,在运行任何 ch03 下的文件之前先执行它。

1. 定义一个准备函数(运行一次即可)

新建一个单元格,粘贴以下代码(它会检查目标目录是否存在,若不存在则复制并修改 URL):

python 复制代码
import os, shutil

def prepare_env():
    src = "/kaggle/input/datasets/hyndla/deep-learning-base-python/deep_learning_base_python-main"
    dst = "/kaggle/working/deep_learning_base_python-main"
    
    # 如果目标已存在,则跳过复制(但若之前的会话已清空,这里会重新复制)
    if not os.path.exists(dst):
        print("正在复制项目到工作目录...")
        shutil.copytree(src, dst)
        
        # 修改 mnist.py 中的 URL
        mnist_py = os.path.join(dst, "dataset/mnist.py")
        with open(mnist_py, "r") as f:
            content = f.read()
        content = content.replace("http://yann.lecun.com/exdb/mnist/", 
                                  "https://ossci-datasets.s3.amazonaws.com/mnist/")
        with open(mnist_py, "w") as f:
            f.write(content)
        print("✅ 环境准备完成")
    else:
        print("✅ 环境已存在,无需重复复制")

# 执行准备
prepare_env()

每次内核重启后,运行此单元格,它会自动完成复制和修复。


2. 运行其他 ch03 文件(如 neuralnet_mnist.py

在准备环境后,切换工作目录到 ch03,然后使用 %run!python 执行目标文件。推荐使用 %run(因为 !python 会启动新进程,但 %run 在当前内核中运行,便于显示图形)。

python 复制代码
import os
os.chdir("/kaggle/working/deep_learning_base_python-main/ch03")

# 运行 neuralnet_mnist.py(示例)
%run neuralnet_mnist.py

如果该文件内部也使用了 PIL.Image.show(),您可能仍然需要将显示方式改为 matplotlib。您可以直接在 Notebook 单元格中复制文件内容并替换显示部分 ,或像我之前那样,用 matplotlib 函数覆盖原 img_show


3. (可选)避免每次复制,直接使用 /kaggle/input 中的文件但修改下载缓存

另一种思路:不复制整个项目,而是单独复制 dataset/mnist.py 到可写位置并修改其 dataset_dir 变量 ,但 mnist_show.pych03 中,它导入的是 ../dataset/mnist,因此若不复制整个项目,需要调整导入路径。复制整个项目更为稳妥,且仅需几秒钟。


📌 注意事项

  • 每次内核重启后,必须重新执行准备代码 ,否则 /kaggle/working 下没有项目文件。
  • 如果您的 Notebook 已经运行了准备代码,但之后又切换了工作目录,只需再次 os.chdirch03 即可运行其他文件,无需重复复制(因为目标已存在)。
  • 所有下载的 MNIST 数据会缓存在 /kaggle/working/deep_learning_base_python-main/dataset/ 下,只要该目录不被删除,后续运行会直接读取缓存,无需重新下载。

🧪 验证

执行准备代码后,运行以下命令确认文件存在:

python 复制代码
import os
print(os.listdir("/kaggle/working/deep_learning_base_python-main/ch03"))

您会看到 mnist_show.pyneuralnet_mnist.py 等文件列表。

现在您可以自由运行该章的任何脚本了。如果还有问题,请随时告知。

相关推荐
Lyn_Li1 个月前
Kaggle Top 5 | 198只股票、200条数据的金融预测——BattleFin高分方案从零复现
python·kaggle·比赛复盘·金融预测
hboot1 个月前
AI工程师第三课 - 机器学习基础
python·scikit-learn·kaggle
乔江seven3 个月前
【跟李沐学AI 】23 实战Kaggle:图象分类(CIFAR-10)
人工智能·深度学习·kaggle·cifar-10
Das1_3 个月前
通过命令行下载kaggle数据
kaggle
Mr数据杨3 个月前
手写数字识别如何支撑文档数字化应用
机器学习·数据分析·kaggle
Mr数据杨3 个月前
四子棋智能体构建与在线对抗决策应用
机器学习·数据分析·kaggle
Mr数据杨3 个月前
灾害推文识别与应急信息筛选优化
机器学习·数据分析·kaggle
Mr数据杨3 个月前
房屋售价预测在房地产估价与风控中的应用
机器学习·数据分析·kaggle
Mr数据杨3 个月前
泰坦尼克乘客生存预测与风险决策建模
机器学习·数据分析·kaggle