2016-02-06 39 views
6

Tôi đang cố gắng đặt kích thước hàng loạt tùy chỉnh trong ứng dụng của mình.Làm thế nào để sử dụng "CỜ" (thiết bị chuyển mạch dòng lệnh) trong TensorFlow?

Nếu tôi đặt đoạn mã sau vào ứng dụng của tôi

tf.app.flags.DEFINE_integer('batch_size', 128, 
          """Number of images to process in a batch.""") 

nó nói lỗi sau

argparse.ArgumentError: argument --batch_size: conflicting option string(s): --batch_size 

và nếu tôi loại bỏ tuyên bố này, nó thề:

usage: <myscript> [-h] [--batch_size BATCH_SIZE] [--data_dir DATA_DIR] 
         [--checkpoint_dir CHECKPOINT_DIR] 

tại dòng nơi sử dụng FLAGS.batch_size.

myscript là tên của tập lệnh của tôi và tôi không viết thư này ở bất cứ đâu và không mong đợi các chuyển đổi dòng lệnh này ở tất cả. Có vẻ như TF sử dụng một số thư viện phân tích cú pháp chuyển đổi Python và mong đợi các chuyển đổi này bằng cách nào đó. Làm thế nào để tránh điều này và mong đợi chuyển mạch tùy chỉnh?

Làm thế nào để mã hóa tùy chỉnh batch_size?

CẬP NHẬT

dòng lệnh của tôi là sau:

myscript image1.png image2.png image3.png 

PNG là những hình ảnh từ cơ sở dữ liệu CIFAR Tôi muốn nhận ra từ dòng lệnh. Đây là dòng lệnh tôi muốn nó được, tôi không muốn nó chứa các tùy chọn được liệt kê trong đầu ra "sử dụng".

+0

Bạn có thể thêm dòng lệnh mà bạn sử dụng để chạy tập lệnh của mình không? – Farseer

+0

Danh sách tệp PNG hình ảnh tôi muốn xử lý. Đây là những gì tôi muốn, tôi không muốn 'batch_size' được thiết lập từ dòng lệnh. – Dims

Trả lời

10

Từ bản cập nhật của bạn, có vẻ như bạn không muốn sử dụng mô-đun FLAGS chút nào. Nếu bạn nhìn vào một chương trình như cifar10_train.py, bạn sẽ thấy như sau near the bottom of the script:

def main(argv=None): # pylint: disable=unused-argument 
    # ... 

if __name__ == '__main__': 
    tf.app.run() 

Các tf.app.run() gọi là một chút soạn sẵn để đảm bảo rằng bất kỳ cờ được phân tích cú pháp, và sau đó gọi các main() chức năng trong cùng một module . Lưu ý rằng main() có đối số argv. Điều này sẽ được lấp đầy với các đối số còn lại cho chương trình của bạn: trong ví dụ của bạn, nó sẽ là một danh sách ["image1.png", "image2.png", "image3.png"]. Do đó, bạn có thể chỉ cần viết hàm main() của mình thành một cái gì đó như:

def main(argv=None): 
    if argv: 
    for filename in argv: 
     run_inference_on_file(filename) 
+7

tại sao TensorFlow có một lá cờ wrapper/thư viện nếu python đã có một trong đó hoạt động tốt? –

+0

Có bất kỳ vị trí nào trong tài liệu mà FLAGS được đề cập không? – charlesreid1

1

Tôi nghi ngờ bạn đang nhập cifar10.py đã có cờ batch_size được xác định và lỗi là do bạn đang cố gắng xác định lại cờ có cùng tên. Nếu bạn đang nhập cifar10, bạn có thể chỉ cần sử dụng --batch_size từ dòng lệnh và FLAGS.batch_size trong mã của mình.

+0

Tại sao nó không hoạt động nếu không có định nghĩa? – Dims

Các vấn đề liên quan