谁能解释我在 tensorflow keras 中的问题?

Posted

技术标签:

【中文标题】谁能解释我在 tensorflow keras 中的问题?【英文标题】:Can anyone explain my problem in tensorflow keras? 【发布时间】:2020-03-17 21:59:09 【问题描述】:
import tensorflow as tf
from tensorflow import keras
import numpy as np

training_inputs = np.array([[0,0,1],
                            [1,1,1],
                            [1,0,1],
                            [0,1,1]])

training_outputs = np.array([[0,1,1,0]])

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(1,3)),
    keras.layers.Dense(1,activation="sigmoid")
    ])

model.compile(optimizer = "rmsprop",
              loss = "binary_crossentropy",
              metrics = ["accuracy"])

model.fit(training_inputs,training_outputs,epochs=1)

prediction = model.predict(np.array([[1,1,0]]))

打印(预测)

有这些问题

Traceback(最近一次调用最后一次):文件 “C:/Users/Αλέξης/Desktop/Youtube/test.py”,第 21 行,在 model.fit(training_inputs,training_outputs,epochs=1) 文件“C:\Users\Αλέξης\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training.py”, 第 709 行,合适 shuffle=shuffle)文件“C:\Users\Αλέξης\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training.py”, 第 2651 行,在 _standardize_user_data exception_prefix='input') 文件“C:\Users\Αλέξης\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training_utils.py”, 第 376 行,在 standardize_input_data 中 '带形状' + str(data_shape))ValueError:检查输入时出错:预期flatten_input有3维,但得到数组 形状 (4, 3)

谁能帮忙?

【问题讨论】:

似乎您的训练输入的尺寸与 input_shape 给出的尺寸不匹配 【参考方案1】:

我删除了训练输出数组的方括号,这样训练输入中的每个条目都有一个关联的类,而不仅仅是第一个有 4 个类

我也删除了flatten层,将input_shape参数设置为dense layer

import tensorflow as tf
from tensorflow import keras
import numpy as np

training_inputs = np.array([[0,0,1],
                        [1,1,1],
                        [1,0,1],
                        [0,1,1]])

training_outputs = np.array([0,1,1,0])

model = keras.Sequential([
    keras.layers.Dense(1,activation="sigmoid",input_shape=(3,))
])

model.compile(optimizer = "rmsprop",
          loss = "binary_crossentropy",
          metrics = ["accuracy"])

model.fit(training_inputs,training_outputs,epochs=1)

【讨论】:

它的无效语法像这样 (,3) 只写3个怎么样 我试过 3 它不接受,但我用了 (3,) 但它有这些问题 ValueError: Input arrays should have the same number of samples as target arrays.找到 4 个输入样本和 1 个目标样本。 现在怎么样,我删除了 Flatten 层,你真的不需要它。您收到此错误的原因是因为您的 training_outputs 是 2d 数组而不是 1d【参考方案2】:

如果你检查你的数组形状,你会发现问题

print(training_inputs.shape)
print(training_outputs.shape)

Output:
(4, 3)
(4,)

您的模型需要一个大小为(批量大小,3)的输入数组,这没关系。但是您的模型输出一个大小数组(批量大小,1),因此您的标签数组必须具有相同的大小。您可以使用 np.expand_dims 轻松解决此问题。

转一下

training_outputs = np.array([[0],[1],[1],[0]])

进入

training_outputs = np.expand_dims(
    np.array([0,1,1,0]),
    axis = 1
)

【讨论】:

以上是关于谁能解释我在 tensorflow keras 中的问题?的主要内容,如果未能解决你的问题,请参考以下文章

Keras 中的 tensorflow 会话在哪里

如何在 Google colab 中更改 Keras/tensorflow 版本?

keras 后端 theano/tensorflow

如何清除Tensorflow-Keras GPU内存?

Keras 输入层和 TensorFlow 占位符之间的区别

Tensorflow.keras:RNN 对 Mnist 进行分类