FluorumSoc 2023-01-31 10:27 采纳率: 100%
浏览 124
已结题

tensotflow中from_tensor_slices报错

在学习单层神经网络时使用from_tensor_slices,发生错误
报错ValueError: Unbatching a tensor is only supported for rank >= 1
import tensorflow as tf
from sklearn import datasets
from pandas import DataFrame
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

x_data = datasets.load_iris().data
y_data = datasets.load_iris().target
np.random.seed(116)
np.random.shuffle(x_data)
np.random.seed(116)
np.random.shuffle(y_data)
tf.random.set_seed(116)

x_train = x_data[:-30]
y_train = y_data[:-30]
x_test = x_data[-30:]
y_test = y_data[-30]
x_train = tf.cast(x_train, dtype=tf.float32)
x_test = tf.cast(x_test, dtype=tf.float32)

train_data = tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(32)
test_data = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(32)

运行结果及详细报错内容

在这一行:

train_data = tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(32)

报错ValueError: Unbatching a tensor is only supported for rank >= 1

尝试去掉括号里的y_train再加上,train_data一行不再报错,但test_data一行无变化
这一语法是否随版本更新而变化?我看的教程里用的是Python3.7,但我装的是3.10
  • 写回答

2条回答 默认 最新

  • 社区专家-Monster-XH 2023-01-31 10:43
    关注

    你输入的 Tensor 是需要 rank >= 1 的。也就是,Tensor 的维度应该>=1。代码中看来,你的 y_train 是一个秩为0的 Tensor,所以需要增加维度。

    可以通过以下代码解决:

    
    y_train = y_train[..., tf.newaxis]
    y_test = y_test[..., tf.newaxis]
    
    

    这样就不会再报错了。还有,你需要对 y_test 做同样的处理。

    而语法可能会随着 TensorFlow 的版本更新而变化。你要看看正在使用与你看到的教程相同版本的 TensorFlow是否相同。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月8日
  • 已采纳回答 1月31日
  • 创建了问题 1月31日

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同