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

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日

悬赏问题

  • ¥50 Java编程实现多功能计算器
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 maccms影视模板 制作影视网站失败 求
  • ¥15 stm32按键设置闹钟数进退位不正常
  • ¥15 自己写的测试驱动程序无法启动
  • ¥15 三电平逆变器中点电位平衡问题
  • ¥20 这怎么写啊 java课设
  • ¥15 用C语言完成一个复杂的游戏
  • ¥15 如何批量更改很多个文件夹里的文件名中包含文件夹名?
  • ¥50 MTK手机模拟HID鼠标出现卡顿