TensorFlow r1.7:多类型Python序列转张量报错及解决方法咨询
Hey there! Let's break down this problem step by step since you're new to TensorFlow 1.7—no confusing jargon, promise.
The tf.data.Dataset.from_tensor_slices() function expects each input sequence you pass to have consistent data types across all elements. Here's why: under the hood, this function converts your input into a single Tensor, and TensorFlow Tensors can only hold one data type at a time (e.g., all integers, all strings, all floats—never a mix).
If you passed a tuple like ([1, 2, 3], ["a", "b", "c"]) or a list with mixed types like [1, "hello", 3.14], TensorFlow can't create a single Tensor from that mixed-type sequence, hence the ValueError you're getting.
Since you need to work with mixed data types, we just need to structure your data so TensorFlow can handle each type separately. Here are two easy approaches:
Method 1: Split and Zip Datasets
Create separate datasets for each data type, then combine them using tf.data.Dataset.zip(). This keeps each type in its own Tensor while letting you work with them as a single dataset.
import tensorflow as tf # Example mixed-type data: numeric features and string labels numeric_data = [10, 20, 30, 40] string_data = ["apple", "banana", "cherry", "date"] # Make datasets for each type ds_numeric = tf.data.Dataset.from_tensor_slices(numeric_data) ds_strings = tf.data.Dataset.from_tensor_slices(string_data) # Combine them into one dataset combined_ds = tf.data.Dataset.zip((ds_numeric, ds_strings)) # Test it out (TF 1.x uses sessions) iterator = combined_ds.make_one_shot_iterator() next_item = iterator.get_next() with tf.Session() as sess: for _ in range(4): num_val, str_val = sess.run(next_item) print(f"Numeric: {num_val}, String: {str_val}")
Method 2: Use a Dictionary to Organize Data
TensorFlow's from_tensor_slices() works great with dictionaries where each key maps to a sequence of the same data type. This keeps your data grouped logically while letting TensorFlow handle each type correctly.
import tensorflow as tf # Organize mixed-type data into a dictionary data_dict = { "ages": [25, 30, 35, 40], "names": ["Alice", "Bob", "Charlie", "Diana"] } # Create dataset directly from the dictionary ds = tf.data.Dataset.from_tensor_slices(data_dict) # Test the dataset iterator = ds.make_one_shot_iterator() next_item = iterator.get_next() with tf.Session() as sess: for _ in range(4): item = sess.run(next_item) print(f"Name: {item['names']}, Age: {item['ages']}")
Both methods work perfectly for TensorFlow 1.7 and Python 3.6.5—pick whichever fits your data structure better!
内容的提问来源于stack exchange,提问作者Michael

