【发布时间】:2021-08-28 02:55:42
【问题描述】:
我正在尝试在 docker 中重新创建这个 jupyter notebook(配置如下):https://www.kaggle.com/ginsaputra/visual-inspection-of-casting-products-using-cnn(在 300x300 图像上训练 CNN 分类器)并且遇到了奇怪的问题。
使用与笔记本中相同的方法和数据,我使用tf.keras.preprocessing.image.ImageDataGenerator 和.flow_from_directory 创建了一个批处理大小为 32 的数据集。此输出(正确):Found 5307 images belonging to 2 classes,所以这工作正常。
首先,当我以 10 个 epoch 运行 model.fit 时,与在训练期间输出 i/166 - 的笔记本不同,我的输出 i/Unknown。我在其他地方读到这是“正确的”,因为数据集是从磁盘流式传输的,并且在第一个 epoch 完成之前它还不知道数据集的完整大小。很公平,但很奇怪a)它在链接的笔记本中工作,b)在创建数据集时它输出Found 5307 images...,所以它似乎知道它的大小,但没关系。我可以忍受的一个小烦恼。
但是,鉴于数据集的批量大小和大小,一个 epoch 应该在 166 步后完成。这不是正在发生的事情。在 166 步之后,这个纪元并没有结束,它似乎永远在继续。步数不断增加到五位数范围内,远远超过数据集所提供的,损失不断下降,准确度不断上升......?
所以我想,我只是传递了一个明确的steps_per_epoch-值 166。现在事情变得更奇怪了:步数上升到 166,然后……什么都没有。输出刚刚停止。查看top,CPU 或 RAM 使用率没有明显变化(分别约为 700% 和 4%,这是有道理的,因为我没有使用 CUDA)。就好像模型只是继续训练,它只是不向 shell 输出任何东西。
有人知道这里发生了什么吗?
Docker 配置:
# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.177.0/containers/ubuntu/.devcontainer/base.Dockerfile
# [Choice] Ubuntu version: bionic, focal
ARG VARIANT="focal"
FROM mcr.microsoft.com/vscode/devcontainers/base:0-${VARIANT}
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
&& apt-get -y install --no-install-recommends \
python3.9 \
python3-pip
RUN pip3 install \
graphviz==0.16 \
ipywidgets==7.5.1 \
keras==2.4.3 \
lime==0.2.0.1 \
matplotlib==3.3.4 \
numpy==1.19.2 \
opencv-python-headless==4.5.1.48 \
pyswip==0.2.10 \
scikit-image==0.18.1 \
tensorflow==2.5.0 \
webcolors==1.11.1
【问题讨论】:
标签: tensorflow tensorflow-datasets tf.keras