首页 > 解决方案 > 制作一个简单的 KERAS 网络进行分类

问题描述

我正在尝试做一个简单的 Keras 神经网络,但该模型不适合:

Train on 562 samples, validate on 188 samples
Epoch 1/20
562/562 [==============================] - 1s 1ms/step - loss: 8.1130 - acc: 0.4911 - val_loss: 7.6320 - val_acc: 0.5213
Epoch 2/20
562/562 [==============================] - 0s 298us/step - loss: 8.1130 - acc: 0.4911 - val_loss: 7.6320 - val_acc: 0.5213
Epoch 3/20
562/562 [==============================] - 0s 295us/step - loss: 8.1130 - acc: 0.4911 - val_loss: 7.6320 - val_acc: 0.5213
Epoch 4/20
562/562 [==============================] - 0s 282us/step - loss: 8.1130 - acc: 0.4911 - val_loss: 7.6320 - val_acc: 0.5213
Epoch 5/20
562/562 [==============================] - 0s 289us/step - loss: 8.1130 - acc: 0.4911 - val_loss: 7.6320 - val_acc: 0.5213
Epoch 6/20
562/562 [==============================] - 0s 265us/step - loss: 8.1130 - acc: 0.4911 - val_loss: 7.6320 - val_acc: 0.5213

数据库结构为 CSV 文件,如下所示:

doc venda   img1    img2    v1                  v2                  gt
RG  venda1  img123  img12   [3399, 162675, ...] [3399, 162675, ...] 1

如果 img1 和 im2 来自同一类,我的意图是使用 v1 和 v2 向量之间的差异来回答我。

编码:

from sklearn.model_selection import train_test_split
(X_train, X_test, Y_train, Y_test) = train_test_split(train, train_labels, test_size=0.25, random_state=42)
# create the model
model = Sequential()
model.add(Dense(10, activation="relu", input_dim=10, kernel_initializer="uniform"))
model.add(Dense(6, activation="relu", kernel_initializer="uniform"))
model.add(Dense(1, activation='sigmoid'))
print(model.summary())

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])
model.fit(
        np.array(X_train), 
        np.array(Y_train), 
        shuffle=True,
        epochs=20, 
        verbose=1,
        batch_size=5,
        validation_data=(np.array(X_test), np.array(Y_test)),
)

我做错了什么?

标签: pythontensorflowneural-networkkeras

解决方案


将差异向量除以某个常数,使特征向量在 0 到 1 或 -1 到 1 的范围内。现在值太大了,损失会很高。如果数据正确规范化,网络学习得更快。


推荐阅读