微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

实验性 Tensorflow 数据集的形状问题

如何解决实验性 Tensorflow 数据集的形状问题

我正在尝试将 numpy 数组存储在 Tensorflow 数据集中。当使用 numpy 数组作为训练和测试数据时,该模型正确拟合,但当我将 numpy 数组存储在单个 Tensorflow 数据集中时则不正确。问题在于数据集的维度。尽管形状乍一看还不错,但还是有问题。

在尝试了多种方法来重塑我的 Tensorflow 数据集后,我仍然无法让它工作。我的代码如下:

train_x.shape 
Out[54]: (7200,40)
train_y.shape
Out[55]: (7200,)
dataset = tf.data.Dataset.from_tensor_slices((x,y))
print(dataset)
Out[56]: <TensorSliceDataset shapes: ((40,),()),types: (tf.int32,tf.int32)>
model.compile(optimizer=optimizer,loss='sparse_categorical_crossentropy')
history = model.fit(dataset,epochs=EPOCHS,batch_size=256)

    sparse_softmax_cross_entropy_with_logits
        logits.get_shape()))
    ValueError: Shape mismatch: The shape of labels (received (1,)) should equal the shape of logits except for the last dimension (received (40,1351)).

我见过this answer,但我确定它在这里不适用。我必须使用 sparse_categorical_crossentropy。我从 this example 启发自己,我想将训练和测试数据存储在 Tensorflow 数据集中。我还想将数组存储在数据集中,因为稍后我将不得不使用它。

解决方法

在使用 batch_size 时,您不能将 model.fit()tf.data.Dataset 一起使用。而是使用 tf.data.Dataset.batch()。您必须按如下方式更改代码才能使其工作。

import numpy as np
import tensorflow as tf

# Some toy data
train_x = np.random.normal(size=(7200,40))
train_y = np.random.choice([0,1,2],size=(7200))

dataset = tf.data.Dataset.from_tensor_slices((train_x,train_y))
dataset = dataset.batch(256)

#### - Define your model here - ####

model.compile(optimizer=optimizer,loss='sparse_categorical_crossentropy')
history = model.fit(dataset,epochs=EPOCHS)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。