首页 > 解决方案 > 如何查看为什么 keras / tensorflow 模型会卡住?

问题描述

我的代码是:

from keras.models import Sequential
from keras.layers import Dense
import numpy
import pandas as pd

X = pd.read_csv(
    "data/train.csv", usecols=['Type', 'Age', 'Breed1', 'Breed2', 'Gender', 'Color1', 'Color2', 'Color3', 'MaturitySize',   'FurLength',    'Vaccinated',   'Dewormed', 'Sterilized',   'Health',   'Quantity', 'Fee', 'VideoAmt', 'PhotoAmt'])
Y = pd.read_csv(
    "data/train.csv", usecols=['AdoptionSpeed'])

model = Sequential()
model.add(Dense(18, input_dim=18, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',
              optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=150, batch_size=100)
scores = model.evaluate(X, Y)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))

我正在尝试训练以了解各种因素(类型、年龄等)如何影响AdoptionSpeed. 然而,准确率停留在 20.6%,并没有真正从那里移动。

Epoch 2/150
14993/14993 [==============================] - 0s 9us/step - loss: -24.1539 - acc: 0.2061
Epoch 3/150
14993/14993 [==============================] - 0s 9us/step - loss: -24.1591 - acc: 0.2061
Epoch 4/150
14993/14993 [==============================] - 0s 9us/step - loss: -24.1626 - acc: 0.2061

...

Epoch 150/150
14993/14993 [==============================] - 0s 9us/step - loss: -24.1757 - acc: 0.2061
14993/14993 [==============================] - 0s 11us/step

acc: 20.61%

我能做些什么来轻推以摆脱困境吗?

标签: pythontensorflowkerasneural-network

解决方案


根据损失值,您的真实数据似乎与模型的输出(sigmoid)不在同一范围内。

Sigmoid 输出仅在 0 和 1 之间。因此,您应该标准化您的数据,使其介于 0 和 1 之间。一种可能性是简单地y除以y.max()

或者您可以尝试其他可能性,考虑:

  • sigmoid:介于 0 和 1 之间
  • tanh:介于 -1 和 1 之间
  • relu: 0 到无穷大
  • 线性:-inf 到 +inf

推荐阅读