这是我需要在 Windows 中转换为批处理文件的脚本:
#!/usr/bin/env sh
TOOLS=./build/tools
$TOOLS/caffe train \
--solver=examples/cifar10/cifar10_full_relu_solver_bn.prototxt
这是我目前想出的脚本:
REM go to the caffe root
cd ../../Build/x64/Release
caffe.exe train --solver=../../../examples/cifar10/cifar10_full_relu_solver_bn.prototxt
pause
这将执行可执行文件 ( caffe.exe
) 并根据需要传递所需的参数文件,但问题是参数文件本身指向与自身相关的另一个文件,并且找不到第二个文件。
这就是我们的参数文件中的第二个文件的地址:
net: "examples/cifar10/cifar10_full_relu_train_test_bn.prototxt"
为了使事情更清楚,文件夹的层次结构如下:
|Build
|--X64
|--Release
|--caffe.exe
|Examples
|--Cifar10
|-- cifar10_full_relu_solver_bn.prototxt
|-- Cifar10_train_test.prototxt
|-- other files as well
我的问题是,有没有一种方法可以用来让我不需要更改所有相对文件地址?
答案1
SET TOOLS=Build/x64/Release
%TOOLS%/caffe.exe train --solver=examples/cifar10/cifar10_full_relu_solver_bn.prototxt
pause
这应该是 shell 脚本的理想转换。我们始终停留在根文件夹,因此作为参数提供的文件内的路径应该被正确引用。
答案2
可能的解决方案是将整个 Cifar10 文件夹复制到正确的位置。
答案3
更新 :
这里有一条注释,此脚本适用于您想要通过直接双击来执行批处理文件的情况。(我的意思是直接从批处理文件所在的(子)目录中执行批处理文件。
但如果您打算从文件夹的根目录调用它,则需要查看已接受的答案。我也将答案留在这里,以防它对其他人有用。
实际答案
我自己使用的是标准方法,该方法被接受为答案。
感谢上帝,我终于让它工作了,实际的等效批处理脚本如下:
REM go to the caffe root
cd ../../
set BIN=build/x64/Release
"%BIN%/caffe.exe" train --solver=examples/cifar10/cifar10_full_relu_solver_bn.prototxt
pause
使用这个,我不再需要改变任何东西。