【问题标题】:Tensorflow - Numpy arrays and Shape errorTensorflow - Numpy 数组和形状错误
【发布时间】:2020-11-29 11:48:11
【问题描述】:

我正在尝试构建一个 Tensorflow 简单的 AI,当我将它与我阅读的有关该主题的各种文章进行比较时,我不明白我的问题出在哪里。

我有两个用于训练大小 (N,1)(应该预测什么)和 (N,3)(应该预测什么输入)的 numpy 数组,我希望我的算法使用 Input 进行预测[0,i] Input[1,i] Input[2,i] ToPredict[i] 的值(第 i 个样本)。 我以为我必须使用 tf.data.Dataset.from_tensor_slices 然后

modele = tf.keras.Sequential([ tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(1) ]) 
modele.compile(optimizer=tf.keras.optimizers.RMSprop(), loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics=['sparse_categorical_accuracy'])
modele.fit(A, epochs=10)
从我上网的一个例子。 (这里A代表tf.data.Dataset.from_tensor_slices(Inputs_Learning,ToPredict_Learning))

当我这样做时,我收到以下错误:

logits 和标签必须具有相同的第一维,得到 logits 形状 [3,10] 和标签形状 [1] [[node loss_9/output_1_loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits(定义于:11)]] [Op:__inference_keras_scratch_graph_2640]

所以我知道存在形状错误,但我不知道如何告诉算法我想要什么形状。

谁能帮帮我?也是的,我看过相关的 stackoverflow 帖子,但它们似乎没有解决我的问题。

【问题讨论】:

    标签: python numpy tensorflow keras


    【解决方案1】:

    为您的数据添加批次维度:

    A = A.batch(10)
    

    【讨论】:

    • 我在 Dense 中更改了号码。但是,当我转置数据时, Input 变为 (3,N) 和 ToPredict (1,N) numpy 数组。然后,当我执行 tf.data.Dataset.from_tensor_slices( 它返回以下错误: ValueError: Dimensions 3 and 1 are not compatible @Andrey
    • 也可以转置标签
    • 之前的代码是 tf.data.Dataset.from_tensor_slices(A,B) 我把它改成了 tf.data.Dataset.from_tensor_slices(A.T,B.T)。所以我假设你所说的“标签”是 B(要预测的值),我在之前的评论中做了转置
    • 网络的输入应该是 (N, 3),标签(预测的内容)应该是 (N, 1)
    • 好的,所以我仍然收到问题中提到的错误。混淆源于我多次说 (1,N) 而不是 (N,1) 包括在问题中。对不起。现在我有两个 Dataset(A,B),A 和 B 的形状为 (N,3) 和 (N,1),正如你所说,它在“fit”行中给出了问题中的错误。
    猜你喜欢
    • 1970-01-01
    • 2020-12-14
    • 2018-10-04
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多