谁能解释我在 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 中的问题?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Google colab 中更改 Keras/tensorflow 版本?