通过命令行为程序提供存储桶路径
Providing bucket path to program through command line
我的google云桶在gs下有两个文件夹train和test://MYBucket/demo2/TFRecords/ 其中包含图像嵌入的 TFRecords。我将存储桶的 url 作为参数传递给程序。
在终端中输入以下内容以提交作业:
$training='gs://MYBucket/demo2/'
$gcloud ml-engine jobs submit training $JOB_NAME \
--job-dir $JOB_DIR \
--module-name $TRAINER_MODULE \
--package-path $TRAINER_PATH \
--region $REGION \
-- \
--train-files $training
这里 training 包含我的存储桶的地址
我的代码 :
from tensorflow.python.lib.io import file_io
from StringIO import StringIO
BUCKET=None
DATA_DIR = "TFRecords/train/"
~Some code~
def Load_input():
global BUCKET
filenames = [os.path.join(BUCKET+DATA_DIR, "train-0000%d-of-00002.tfrecord" % i) for i in xrange(0, 1)]
for f in filenames:
if not tf.gfile.Exists(f):
raise ValueError("Failed to find file: " + f)
filename_queue = tf.train.string_input_producer(filenames)
~Some code~
def main(unused_args):
parser.add_argument('--train-files',help='BUCKET path to training data',nargs='+',required=True)
args = parser.parse_args()
global BUCKET
BUCKET = StringIO(file_io.read_file_to_string(args.__dict__['train_files'][0]))
~Some other code that internally calls **Load_input()**~
行:
filenames = [os.path.join(BUCKET+DATA_DIR, "train-0000%d-of-00002.tfrecord" % i) for i in xrange(0, 1)]
抛出错误:
TypeError: unsupported operand type(s) for +: 'instance' and 'str'
我试过的:
BUCKET = file_io.read_file_to_string(args.train_files[0])
但它引发错误:
raise ValueError("Failed to find file: " + f)
ERROR 2018-03-16 15:57:55 +0530 master-replica-0
ValueError: Failed to find file: TFRecords/train/train-00000-of-00002.tfrecord
我的问题:
我应该如何加入 BUCKET 和 DATA_DIR 才能正确提供训练文件的路径?
你应该可以在没有 StringIO 的情况下使用字符串:
BUCKET = file_io.read_file_to_string(args.__dict__['train_files'][0])
此外,这应该是同一件事:
BUCKET = file_io.read_file_to_string(args.train_files[0])
如果我没有正确理解你的问题,--train-files
只是一条路径。
在这种情况下,您只需执行以下操作
def main(unused_args):
parser.add_argument('--train-files',help='BUCKET path to training data',nargs='+',required=True)
args = parser.parse_args()
global BUCKET
BUCKET = args.train_files[0]
此外,您将考虑使用 os.path.join
构建整个路径;目前您正在使用 BUCKET+DATA
构建零件,而不是尝试:
filenames = [os.path.join(BUCKET, DATA_DIR, "train-0000%d-of-00002.tfrecord" % i) for i in xrange(0, 1)]
最后,如果可能的话,我建议避免为 BUCKET 使用全局变量,因为它最终可能会导致细微的错误(例如,如果您在初始化之前不小心使用了它们)。考虑将值作为参数传递,例如
def load_input(bucket):
filenames = [os.path.join(bucket, DATA_DIR, "train-0000%d-of-00002.tfrecord" % i) for i in xrange(0, 1)]
# ...
def main(unused_args):
parser.add_argument('--train-files',help='BUCKET path to training data',nargs='+',required=True)
args = parser.parse_args()
load_input(bucket=args.train_files[0])
(此外,您可能会发现 command-line 参数使用与变量名称相同的名称很有帮助)。
我的google云桶在gs下有两个文件夹train和test://MYBucket/demo2/TFRecords/ 其中包含图像嵌入的 TFRecords。我将存储桶的 url 作为参数传递给程序。
在终端中输入以下内容以提交作业:
$training='gs://MYBucket/demo2/'
$gcloud ml-engine jobs submit training $JOB_NAME \
--job-dir $JOB_DIR \
--module-name $TRAINER_MODULE \
--package-path $TRAINER_PATH \
--region $REGION \
-- \
--train-files $training
这里 training 包含我的存储桶的地址
我的代码 :
from tensorflow.python.lib.io import file_io
from StringIO import StringIO
BUCKET=None
DATA_DIR = "TFRecords/train/"
~Some code~
def Load_input():
global BUCKET
filenames = [os.path.join(BUCKET+DATA_DIR, "train-0000%d-of-00002.tfrecord" % i) for i in xrange(0, 1)]
for f in filenames:
if not tf.gfile.Exists(f):
raise ValueError("Failed to find file: " + f)
filename_queue = tf.train.string_input_producer(filenames)
~Some code~
def main(unused_args):
parser.add_argument('--train-files',help='BUCKET path to training data',nargs='+',required=True)
args = parser.parse_args()
global BUCKET
BUCKET = StringIO(file_io.read_file_to_string(args.__dict__['train_files'][0]))
~Some other code that internally calls **Load_input()**~
行:
filenames = [os.path.join(BUCKET+DATA_DIR, "train-0000%d-of-00002.tfrecord" % i) for i in xrange(0, 1)]
抛出错误:
TypeError: unsupported operand type(s) for +: 'instance' and 'str'
我试过的:
BUCKET = file_io.read_file_to_string(args.train_files[0])
但它引发错误:
raise ValueError("Failed to find file: " + f)
ERROR 2018-03-16 15:57:55 +0530 master-replica-0
ValueError: Failed to find file: TFRecords/train/train-00000-of-00002.tfrecord
我的问题: 我应该如何加入 BUCKET 和 DATA_DIR 才能正确提供训练文件的路径?
你应该可以在没有 StringIO 的情况下使用字符串:
BUCKET = file_io.read_file_to_string(args.__dict__['train_files'][0])
此外,这应该是同一件事:
BUCKET = file_io.read_file_to_string(args.train_files[0])
如果我没有正确理解你的问题,--train-files
只是一条路径。
在这种情况下,您只需执行以下操作
def main(unused_args):
parser.add_argument('--train-files',help='BUCKET path to training data',nargs='+',required=True)
args = parser.parse_args()
global BUCKET
BUCKET = args.train_files[0]
此外,您将考虑使用 os.path.join
构建整个路径;目前您正在使用 BUCKET+DATA
构建零件,而不是尝试:
filenames = [os.path.join(BUCKET, DATA_DIR, "train-0000%d-of-00002.tfrecord" % i) for i in xrange(0, 1)]
最后,如果可能的话,我建议避免为 BUCKET 使用全局变量,因为它最终可能会导致细微的错误(例如,如果您在初始化之前不小心使用了它们)。考虑将值作为参数传递,例如
def load_input(bucket):
filenames = [os.path.join(bucket, DATA_DIR, "train-0000%d-of-00002.tfrecord" % i) for i in xrange(0, 1)]
# ...
def main(unused_args):
parser.add_argument('--train-files',help='BUCKET path to training data',nargs='+',required=True)
args = parser.parse_args()
load_input(bucket=args.train_files[0])
(此外,您可能会发现 command-line 参数使用与变量名称相同的名称很有帮助)。