具有keras python的神经网络模型

时间:2018-05-13 20:49:19

标签: python numpy tensorflow neural-network keras

我对我的NN模型有疑问。我正在使用python中的keras。我的训练包括1000个样本,每个样本有4320个特征。有10个类别,我的Y包含10个元素的numpy数组,除了1之外的所有位置都有0。

然而,我的NN并没有从第一个时代开始学习,我可能有我的模型错了,这是我第一次尝试建立一个NN模型而且我一定是出错了。

private isMapInitialized = false;
private map: any;


// Here everything statrs
ngOnInit() {
    this.openMapPanel();
}   


// Here I get the map and everything works great!
openMapPanel() {
    setTimeout(() => {
        if (!this.isMapInitialized) {
            this.initMap();

            this.isMapInitialized = true;
        }
    }, 300);
}


initMap() {
    var california = {lat: 37.4419, lng: -122.1419};
        this.map = new google.maps.Map(document.getElementById('map'), {
        center: california,
        zoom: 13
    });

    google.maps.event.addListener(this.map, 'click', function(event) {
        this.placeNewMarker(event.latLng);
    });
}


placeNewMarker(location) {
        var marker = new google.maps.Marker({
            position: location,
            map: this.map
        });
    });
}

这是我的NN代码的一部分:

Epoch 1/150
1000/1000 [==============================] - 40s 40ms/step - loss: 6.7110 - acc: 0.5796
Epoch 2/150
1000/1000 [==============================] - 39s 39ms/step - loss: 6.7063 - acc: 0.5800
Epoch 3/150
1000/1000 [==============================] - 38s 38ms/step - loss: 6.7063 - acc: 0.5800
Epoch 4/150
1000/1000 [==============================] - 39s 39ms/step - loss: 6.7063 - acc: 0.5800
Epoch 5/150
1000/1000 [==============================] - 38s 38ms/step - loss: 6.7063 - acc: 0.5800
Epoch 6/150
1000/1000 [==============================] - 38s 38ms/step - loss: 6.7063 - acc: 0.5800
Epoch 7/150
1000/1000 [==============================] - 40s 40ms/step - loss: 6.7063 - acc: 0.5800
Epoch 8/150
1000/1000 [==============================] - 39s 39ms/step - loss: 6.7063 - acc: 0.5800
Epoch 9/150
1000/1000 [==============================] - 40s 40ms/step - loss: 6.7063 - acc: 0.5800

所以,我的X是一个长度为1000的numpy数组,包含4320个元素的其他numpy数组。我的Y是一个长度为1000的numpy数组,包含10个元素(类别)的其他numpy数组。

我做错了什么或根据这个训练集无法学习? (在1NN与曼哈顿距离上,我在这个训练集上获得了约80%的准确度)

L.E。:在我对数据进行标准化后,这是我前10个时期的输出:

model = Sequential()
model.add(Dense(4320, input_dim=4320, activation='relu'))
model.add(Dense(50, activation='relu'))
model.add(Dense(10, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=150, batch_size=10)

看起来它开始波动,所以看起来很好

1 个答案:

答案 0 :(得分:2)

看起来您的类别,类是互斥的,因为您的目标数组是单热编码的(即您不必同时预测2个类)。在这种情况下,您应该在最后一个图层上使用softmax来生成分发并使用categorical_crossentropy进行训练。事实上,您可以将目标设置为Y = [2,4,0,1]作为类别索引,并使用sparse_categorical_crossentropy进行训练,这样可以节省创建2个形状数组的时间(样本,10)。

您似乎拥有许多功能,很可能您的网络性能取决于您预处理数据的方式。对于连续输入,将其标准化是明智的,对于离散输入,将其编码为热点以帮助学习。