1

我正在尝试学习 Synatxnet。我让它通过 Docker 运行。但我真的不太了解 Synatxnet 或 Docker 程序。在Github Sytaxnet 页面上它说

SyntaxNet 模型是通过运行时标志(易于更改)和文本格式 TaskSpec 协议缓冲区的组合来配置的。演示中使用的规范文件位于 syntaxnet/models/parsey_mcparseface/context.pbtxt 中。

我究竟如何找到规范文件来编辑它?

我使用这些Instructions在 Docker 容器中编译了 SyntaxNet 。

FROM java:8

ENV SYNTAXNETDIR=/opt/tensorflow PATH=$PATH:/root/bin

RUN mkdir -p $SYNTAXNETDIR \
    && cd $SYNTAXNETDIR \
    && apt-get update \
    && apt-get install git zlib1g-dev file swig python2.7 python-dev python-pip -y \
    && pip install --upgrade pip \
    && pip install -U protobuf==3.0.0b2 \
    && pip install asciitree \
    && pip install numpy \
    && wget https://github.com/bazelbuild/bazel/releases/download/0.2.2b/bazel-0.2.2b-installer-linux-x86_64.sh \
    && chmod +x bazel-0.2.2b-installer-linux-x86_64.sh \
    && ./bazel-0.2.2b-installer-linux-x86_64.sh --user \
    && git clone --recursive https://github.com/tensorflow/models.git \
    && cd $SYNTAXNETDIR/models/syntaxnet/tensorflow \
    && echo "\n\n\n" | ./configure \
    && apt-get autoremove -y \
    && apt-get clean

RUN cd $SYNTAXNETDIR/models/syntaxnet \
    && bazel test --genrule_strategy=standalone syntaxnet/... util/utf8/...

WORKDIR $SYNTAXNETDIR/models/syntaxnet

CMD [ "sh", "-c", "echo 'Bob brought the pizza to Alice.' | syntaxnet/demo.sh" ]

# COMMANDS to build and run
# ===============================
# mkdir build && cp Dockerfile build/ && cd build
# docker build -t syntaxnet .
# docker run syntaxnet
4

1 回答 1

0

首先,注释掉 dockerfile 中的命令行,然后在主机上创建并 cd 到一个空目录。然后,您可以从映像创建一个容器,将容器中的一个目录挂载到您的硬盘上:

docker run -it --rm -v / pwd:/tmp bash

您现在将在容器中拥有一个 bash 会话。将规范文件复制到/tmpfrom /opt/tensorflow/syntaxnet/models/parsey_mcparseface/context.pbtxt(我猜这就是您在上面提供的信息的位置 - 我无法让您的 dockerfile 构建图像,所以我无法确认它;您始终可以find . -name context.pbtxt从 root运行找到它),然后退出容器(ctrl-d 或exit)。

您现在已经准备好在主机的 hd 上编辑该文件,但您真的希望它在一个正在运行的容器中。如果它来自的目录仅包含该文件,那么您可以简单地将主机目录挂载到容器中的该路径。如果它包含其他内容,那么您可以使用所谓的引导脚本将文件从您的挂载目录(在上面的示例中,即tmp)移动到它的主位置。或者,您可以告诉软件在哪里可以找到带有标志的规范文件,但这需要更多的研究。

于 2016-09-26T09:44:46.783 回答