如何使用Keras定义模型架构?

时间:2018-08-28 12:55:56

标签: python machine-learning neural-network keras

我要创建神经网络模型,如下图所示

enter image description here

我的x_train变量的尺寸为(20204,2),y_train变量的尺寸为(20204,)

我正在使用keras顺序模型,但是当我运行下面的代码时

model=Sequential()
model.add(Dense(output_dim = 2, init = 'uniform', activation = 'relu', input_dim=20204))
model.add(Dense(output_dim = 3,init = 'uniform',activation = 'softmax'))
model.compile(loss = 'sparse_categorical_crossentropy',optimizer = 'adam',metrics = ['accuracy'])
model.fit(x_train,y_train,batch_size=12,epochs=14)
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=12)
print(loss_and_metrics)

我说错了

ValueError: Error when checking input: expected dense_26_input to have shape (20204,) but got array with shape (2,)

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

当您说输入的形状为(20204, 2)时,表示您有 20204 个训练示例,每个示例都具有 2 个维度。

您需要告诉您输入的内容期望 2 尺寸,并且 20204 。发生错误是因为您的模型希望接收 20204 功能(即参数input_dim=20204),但实际上接收了 2 功能。

要解决此问题,只需更改我上面提到的参数即可:

model=Sequential()
model.add(Dense(output_dim=2, init='uniform', activation='relu', input_dim=2))
model.add(Dense(output_dim=3, init='uniform', activation='softmax'))
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=12, epochs=14)
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=12)
print(loss_and_metrics)

编辑:

正如@today和@desertnaut正确指出的那样,您的图形显示了具有 4 个神经元的隐藏层,而不是上面代码所产生的 2 个神经元。

要更改此设置,您需要用output_dim=2替换隐藏层中的参数output_dim=4

model.add(Dense(output_dim=4, init='uniform', activation='relu', input_dim=2))