TensorFlow tutorial nói rằng tại thời điểm tạo, chúng ta cần phải xác định hình dạng của tensors. Hình dạng đó tự động trở thành hình dạng của tensor. Nó cũng nói rằng TensorFlow cung cấp các cơ chế nâng cao để định hình lại các biến. Làm thế nào tôi có thể làm điều đó? Bất kỳ ví dụ mã nào?Làm cách nào để thay đổi hình dạng của biến trong TensorFlow?
Trả lời
Hãy xem shapes-and-shaping từ tài liệu TensorFlow. Nó mô tả các biến đổi hình dạng khác nhau có sẵn.
Chức năng phổ biến nhất có lẽ là tf.reshape, tương tự với số lượng tương đương. Nó cho phép bạn chỉ định bất kỳ hình dạng nào bạn muốn miễn là số phần tử vẫn giữ nguyên. Có một số ví dụ có sẵn trong tài liệu.
Documentation shows phương pháp định hình lại. Đó là:
- reshape
- bóp (loại bỏ kích thước của kích thước 1 từ hình dạng của một tensor)
- expand_dims (thêm kích thước của kích thước 1)
cũng như loạt các phương pháp để có được shape
, size
, rank
trong số tensor của bạn. Có lẽ là sử dụng nhiều nhất là reshape
và đây là một ví dụ mã với một vài trường hợp cạnh (-1):
import tensorflow as tf
v1 = tf.Variable([
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
])
v2 = tf.reshape(v1, [2, 6])
v3 = tf.reshape(v1, [2, 2, -1])
v4 = tf.reshape(v1, [-1])
# v5 = tf.reshape(v1, [2, 4, -1]) will fail, because you can not find such an integer for -1
v6 = tf.reshape(v1, [1, 4, 1, 3, 1])
v6_shape = tf.shape(v6)
v6_squeezed = tf.squeeze(v6)
v6_squeezed_shape = tf.shape(v6_squeezed)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
a, b, c, d, e, f, g = sess.run([v2, v3, v4, v6, v6_shape, v6_squeezed, v6_squeezed_shape])
# print all variables to see what is there
print e # shape of v6
print g # shape of v6_squeezed
Lớp tf.Variable
là cách khuyến khích để tạo ra các biến, nhưng nó hạn chế khả năng của bạn để thay đổi hình dạng của biến khi nó đã được tạo.
Nếu bạn cần thay đổi hình dạng của một biến, bạn có thể làm như sau (ví dụ cho một 32-bit floating point tensor):
var = tf.Variable(tf.placeholder(tf.float32))
# ...
new_value = ... # Tensor or numpy array.
change_shape_op = tf.assign(var, new_value, validate_shape=False)
# ...
sess.run(change_shape_op) # Changes the shape of `var` to new_value's shape.
Lưu ý rằng tính năng này không có trong các API công cộng tài liệu , do đó, nó có thể thay đổi. Nếu bạn thấy mình cần sử dụng tính năng này, hãy cho chúng tôi biết và chúng tôi có thể điều tra một cách để hỗ trợ tính năng này trong tương lai.
tf.Variable(tf.placeholder(tf.float32))
không hợp lệ tại tensorflow 1.2.1
trong vỏ python:
import tensorflow as tf
tf.Variable(tf.placeholder(tf.float32))
Bạn sẽ nhận được:
ValueError: initial_value must have a shape specified: Tensor("Placeholder:0", dtype=float32)
Cập nhật: nếu bạn thêm validate_shape=False
, có sẽ không có lỗi.
tf.Variable(tf.placeholder(tf.float32), validate_shape=False)
nếu tf.py_func
phù hợp với yêu cầu của bạn:
def init():
return numpy.random.rand(2,3)
a = tf.pyfun(init, [], tf.float32)
Bạn có thể tạo biến mà có hình dạng bất kỳ bằng cách thông qua hàm init của riêng bạn.
Một cách khác:
var = tf.get_varible('my-name', initializer=init, shape=(1,1))
Bạn có thể vượt qua tf.constant
hay bất kỳ chức năng init
trả về mảng NumPy. Hình dạng được cung cấp sẽ không được xác thực. Hình dạng đầu ra là hình dạng dữ liệu thực của bạn.
- 1. Các biến có hình dạng động TensorFlow
- 2. Làm thế nào để thay đổi hình dạng của dotplot?
- 3. Làm cách nào để thay đổi hình ảnh của PictureBox?
- 4. Làm cách nào để thay đổi hình dạng của tab JTabbedPane?
- 5. Làm thế nào để nạp dữ liệu vào với kích thước thay đổi trong Tensorflow
- 6. hình dạng tensorflow của một tensor lát gạch
- 7. TensorFlow - Nhận dạng văn bản trong hình
- 8. Làm cách nào để có được độ dốc của sự mất mát ở biến TensorFlow?
- 9. Làm cách nào để thay đổi loại dtype trong TensorFlow cho tệp csv?
- 10. Thay đổi tỷ lệ của một tensor trong tensorflow
- 11. Cách phát hiện biến nào là 'nonetype' trong tensorflow
- 12. Làm thế nào để chuyển đổi mảng numpy sang định dạng TensorFlow tiêu chuẩn?
- 13. Làm cách nào để thay đổi hình dạng con trỏ bằng PyQt?
- 14. Làm thế nào để thay đổi hình nền của TinyMCE?
- 15. Làm cách nào để thay đổi giá trị của biến toàn cục bên trong một hàm
- 16. Làm cách nào để thực thi mã khi giá trị của biến thay đổi trong C#?
- 17. Làm cách nào để chuyển đổi mô hình Tensorflow được đào tạo thành Keras?
- 18. Làm thế nào để thay đổi định dạng của một cột của bảng excel trong C#?
- 19. Làm cách nào để thay đổi màu của hình ảnh trong silverlight/WP7 (Mặt nạ màu)?
- 20. Danh sách các Op có thể thay đổi trong Tensorflow
- 21. Làm thế nào để thay đổi hình dạng của nút bằng cách sử dụng xml hoặc sử dụng java?
- 22. Làm cách nào để thay đổi định dạng văn bản của một ô Excel bằng C#?
- 23. Làm cách nào để thay đổi cách RAD Studio (2010 trở lên) định dạng mã của tôi?
- 24. Làm thế nào để ngăn chặn các số được thay đổi thành dạng số mũ trong hình matplotlib của Python
- 25. Thay đổi hình dạng của nút WPF mà không thay đổi các kiểu khác
- 26. Làm cách nào để thay đổi nhận dạng từ trong chính tả vim?
- 27. Làm cách nào để thay đổi định dạng ngày của bộ chọn phạm vi ngày?
- 28. Không có biến nào để lưu lỗi trong Tensorflow
- 29. Làm cách nào để thay đổi khung textLabel của ô?
- 30. Làm thế nào để tạo ra toàn bộ trong tensorflow?
Vấn đề với cách tiếp cận này là 'var.shape' không được cập nhật cho phù hợp. Điều này vẫn tồn tại khi lưu trữ một trạm kiểm soát và do đó ngăn cản việc nạp điểm kiểm tra một lần nữa, vì hình dạng biến không phù hợp với hình dạng trọng lượng. Có cách nào để buộc 'var.shape' cập nhật không? Tôi có nên tạo một vấn đề GitHub không? –
Tôi đã tìm thấy chuỗi này, thảo luận vấn đề: https://github.com/tensorflow/tensorflow/issues/10091#issuecomment-304301817 Tôi tự hỏi, nếu có cách để mở rộng trọng số của các mạng hiện có –