AttributeError: 'tuple' object has no attribute 'rank' with tfp.layers.DenseVariational and Keras Input (TF 2.18.0, TFP 0.24.0)
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 42/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- numpy, python
- Lĩnh vực
- machine-learning
Hướng nghiên cứu
Tái hiện ví dụ Functional API tối thiểu với tfp.layers.DenseVariational, sau đó kiểm tra phần kiểm tra tính tương thích trong tf_keras/src/engine/input_spec.py và đường dẫn gọi DenseVariational được nêu trong traceback. So sánh cách xử lý shape đầu vào đi tới x.shape.rank; hoàn tất khi model có thể được tạo và tóm tắt mà không gặp tuple-rank AttributeError.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Describe the bug
I am encountering an AttributeError: 'tuple' object has no attribute 'rank' when using tfp.layers.DenseVariational as the first layer following a tf.keras.Input layer in a Keras Functional API model. The error seems to occur during Keras's internal InputSpec compatibility check, where it expects a tf.TensorShape object but receives a Python tuple for the input shape from the DenseVariational layer.
To Reproduce
Steps to reproduce the behavior:
- Environment: Python 3.11.9 on Windows 10.
- Installed packages:
tensorflow==2.18.0tensorflow-probability==0.24.0numpy==1.26.4
- Run the following minimal code snippet:
import tensorflow as tf
import tensorflow_probability as tfp
tfk = tf.keras
tfkl = tf.keras.layers
tfd = tfp.distributions
print(f"TensorFlow Version: {tf.__version__}")
print(f"TensorFlow Probability Version: {tfp.__version__}")
print(f"NumPy Version: {np.__version__}")
input_feature_size = 60
num_classes = 3
num_train_samples_example = 1000
kl_divergence_weight = 1.0 / num_train_samples_example
try:
inputs = tfk.Input(shape=(input_feature_size,), name="input_layer")
posterior_fn_constructor = tfp.layers.default_mean_field_normal_fn(is_singular=True)
prior_fn_constructor = tfp.layers.default_multivariate_normal_fn
x = tfp.layers.DenseVariational(
units=64,
make_posterior_fn=posterior_fn_constructor,
make_prior_fn=prior_fn_constructor,
kl_weight=kl_divergence_weight,
activation='relu',
name="dv1"
)(inputs)
outputs = tfkl.Dense(units=num_classes, name="logits")(x)
model = tfk.Model(inputs=inputs, outputs=outputs, name="bnn_test_model")
model.summary()
print("Model created successfully.")
except Exception as e:
print(f"\nError during model creation: {e}")
import traceback
traceback.print_exc()
An unexpected error occurred in main: 'tuple' object has no attribute 'rank'
Traceback (most recent call last):
File "C:\Users\W10\PycharmProjects\eurusd5\eurusd5.py", line 239, in <module>
accuracies, true_labels, predicted_labels = walk_forward_tfp_bnn(
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\W10\PycharmProjects\eurusd5\eurusd5.py", line 151, in walk_forward_tfp_bnn
bnn_model = create_bnn_model(input_shape_for_model, num_classes, len(X_train_scaled))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\W10\PycharmProjects\eurusd5\eurusd5.py", line 78, in create_bnn_model
x = tfp.layers.DenseVariational(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\W10\PycharmProjects\eurusd5\.venv\Lib\site-packages\tf_keras\src\utils\traceback_utils.py", line 70, in error_handler
raise e.with_traceback(filtered_tb) from None
File "C:\Users\W10\PycharmProjects\eurusd5\.venv\Lib\site-packages\tf_keras\src\engine\input_spec.py", line 251, in assert_input_compatibility
ndim = x.shape.rank
^^^^^^^^^^^^
AttributeError: 'tuple' object has no attribute 'rank'
System information
OS Platform and Distribution: Windows 10
TensorFlow installed from: pip
TensorFlow version: 2.18.0
TensorFlow Probability version: 0.24.0
Python version: 3.11.9
NumPy version: 1.26.4
CUDA/cuDNN version: N/A (CPU only)
GPU model and memory: N/A (CPU only)
Additional context
The issue appears to be specific to how tfp.layers.DenseVariational (in TFP 0.24.0) interacts with the Keras Functional API's input shape handling when using TensorFlow 2.18.0, particularly for 1D vector inputs. Attempts to use batch_input_shape in tf.keras.Input or explicitly pass input_shape to DenseVariational did not resolve this specific "rank" error. The error occurs even when using TFP's default make_posterior_fn and make_prior_fn.
Thank you for your help!
- Ngôn ngữ chính
- Jupyter Notebook
- Star
- 4.4k
- Fork
- 1.1k
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của tensorflow/probability
-
KL divergence between two `TransformedDistribution`s with a shared non-injective bijector (`AbsoluteValue`) returns the base KLCó thể đã có người làm @Andreas-Hum đã nhận 7 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
tensorflow/probability#2036 ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 68/100
tensorflow/probability#2034 ·
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
tensorflow/probability#2021 ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 30/100
tensorflow/probability#2015 ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 48/100
tensorflow/probability#2013 ·
Tất cả issue của tensorflow/probability
Issue tương tự
-
[Bug]: DoubleMLRDDData accepts a score_col that is no data column (as in its docstring example); the running variable then becomes a covariate and RDFlex failsCó thể đã có người làm @vrjdev đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
DoubleML/doubleml-for-py#455 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Install page: spectarf's CUDA engine fails with PyTorch for CUDA 13.0 (nvvmError: ERROR_INVALID_IR)Có thể đã có người làm @lukepolson đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 79/100
PyTomography/PyTomography#435 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
beginner friendly
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 67/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 82/100
aws-samples/sample-per-model-bedrock#821 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
instadeepai/InstaNovo-FM#50 ·