python-2.7 - keras错误:检查目标时出错:预期dense_2具有形状(2,)但得到形状为(1,)的数组
问题描述
我试图用 keras 编写一些示例,但是在检查目标时发生了一些错误错误:预期的 dense_2 具有形状(2,)但得到了形状为(1,)的数组
我试图改变 input_shape 但它不起作用
import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD
from sklearn.preprocessing import LabelBinarizer
from sklearn.model_selection import train_test_split
import numpy
print "hello"
input=[[1],[2],[3],[4],[5],[6],[7],[8]]
input=numpy.array(input, dtype="float")
# input=input.reshape(8,1)
output=[[1],[0],[1],[0],[1],[0],[1],[0]]
output=numpy.array(output, dtype="float")
(trainx,testx,trainy,testy)=train_test_split(input, output, test_size=0.25, random_state=42)
lb = LabelBinarizer()
trainy=lb.fit_transform(trainy)
testy=lb.transform(testy)
model=Sequential()
model.add(Dense(4,input_shape=(1,),activation="sigmoid"))
# model.add(Dense(4,activation="sigmoid"))
# print len(lb.classes_)
model.add(Dense(len(lb.classes_),activation="softmax",input_shape=(4,)))
INIT_LR = 0.01
EPOCHS = 20
print("[INFO] training network...")
opt = SGD(lr=INIT_LR)
model.compile(loss="categorical_crossentropy", optimizer=opt,metrics=["accuracy"])
H = model.fit(trainx, trainy, validation_data=(testx, testy),epochs=EPOCHS, batch_size=2)
解决方案
由于您有两个类,因此您可以在最后的 Dense 层中有一个神经元并使用 sigmoid 激活。或者如果你想使用 softmax,你需要像这样创建一个 y 的热编码。
(trainx,testx,trainy,testy)=train_test_split(input, output, test_size=0.25, random_state=42)
trainy = keras.utils.to_categorical(trainy, 2)
testy = keras.utils.to_categorical(testy, 2)
推荐阅读
- kotlin - 从 java 类中检索 kotlin 注释
- jquery - 有没有办法在下拉列表中获取非选定项目的值?
- c - 按位移位 (varUint8 >> 7) & 0x01u - Misra 兼容
- cmake - 将 CMakeLists.txt 的生成集成到所述 CMakeLists.txt
- javascript - 如何将外部 js 文件中的方法导入和使用到 AngularJS?
- azure-cognitive-search - search.highlight 的预期行为 - 每个标记包围的标记还是一个标记包围的多个标记?
- java - 我怎样才能表明一个泛型类是从一个类或另一个类扩展而来的?
- apache-spark - 在 CASE WHEN 中使用 IN 运算符的 Spark SQL 查询无法转换为 SparkPlan
- jestjs - 如何在 beforeAll() 中调用 DB 连接并在 afterAll() 中关闭 DB 连接
- jersey - 泽西岛的 SSE:在 javax.ws.rs.sse.Sse 类中找不到合适的构造函数