我对我的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)
看起来它开始波动,所以看起来很好
答案 0 :(得分:2)
看起来您的类别,类是互斥的,因为您的目标数组是单热编码的(即您不必同时预测2个类)。在这种情况下,您应该在最后一个图层上使用softmax
来生成分发并使用categorical_crossentropy
进行训练。事实上,您可以将目标设置为Y = [2,4,0,1]
作为类别索引,并使用sparse_categorical_crossentropy
进行训练,这样可以节省创建2个形状数组的时间(样本,10)。
您似乎拥有许多功能,很可能您的网络性能取决于您预处理数据的方式。对于连续输入,将其标准化是明智的,对于离散输入,将其编码为热点以帮助学习。