Keras 精度返回 0
Keras accuracy returning 0
基本上,我正在研究这个项目符号优化程序。我想研究重量、长度和质量等不同的弹道参数如何影响弹道系数。但是,我的训练准确率是0,虽然有loss和val_loss。我已经阅读过与此相关的类似 Whosebug 帖子,但 none 到目前为止对我有所帮助。也许我只是没有做对;我正在引用
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.utils import shuffle
df = pd.read_csv('Bullet Optimization\ShootForum Bullet DB_2.csv')
from sklearn.model_selection import train_test_split
from sklearn import preprocessing
dataset = df.values
X = dataset[:,0:12]
X = np.asarray(X).astype(np.float32)
y = dataset[:,13]
y = np.asarray(y).astype(np.float32)
X_train, X_val_and_test, y_train, y_val_and_test = train_test_split(X, y, test_size=0.3, shuffle=True)
X_val, X_test, y_val, y_test = train_test_split(X_val_and_test, y_val_and_test, test_size=0.5)
from keras.models import Sequential
from keras.layers import Dense, BatchNormalization
model = Sequential(
[
#2430 is the shape of X_train
#BatchNormalization(axis=-1, momentum = 0.1),
Dense(32, activation='relu'),
Dense(32, activation='relu'),
Dense(1,activation='softmax'),
]
)
model.compile(optimizer='sgd', loss='binary_crossentropy', metrics=['accuracy'])
history = model.fit(X_train, y_train, batch_size=64, epochs=100, validation_data=(X_val, y_val))
我的代码是不是做错了什么?我知道一些 python 但我只是出于自己的目的在教程的基础上进行了构建。
你的代码有几个问题。
第一行:
Dense(1,activation='softmax')
这一行每次都会导致输出1
。所以即使你在做分类,如果你有 2 类,你的准确率也会是 50%。 Softmax
输出的总和将等于一。所以将它与一个神经元一起使用是没有意义的。
您需要更改损失和指标,因为这是一个回归。
loss='mse', metrics=['mse']
此外,您的输出神经元应该是线性的,这意味着不需要任何激活函数。它应该是这样的:
Dense(1)
基本上,我正在研究这个项目符号优化程序。我想研究重量、长度和质量等不同的弹道参数如何影响弹道系数。但是,我的训练准确率是0,虽然有loss和val_loss。我已经阅读过与此相关的类似 Whosebug 帖子,但 none 到目前为止对我有所帮助。也许我只是没有做对;我正在引用
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.utils import shuffle
df = pd.read_csv('Bullet Optimization\ShootForum Bullet DB_2.csv')
from sklearn.model_selection import train_test_split
from sklearn import preprocessing
dataset = df.values
X = dataset[:,0:12]
X = np.asarray(X).astype(np.float32)
y = dataset[:,13]
y = np.asarray(y).astype(np.float32)
X_train, X_val_and_test, y_train, y_val_and_test = train_test_split(X, y, test_size=0.3, shuffle=True)
X_val, X_test, y_val, y_test = train_test_split(X_val_and_test, y_val_and_test, test_size=0.5)
from keras.models import Sequential
from keras.layers import Dense, BatchNormalization
model = Sequential(
[
#2430 is the shape of X_train
#BatchNormalization(axis=-1, momentum = 0.1),
Dense(32, activation='relu'),
Dense(32, activation='relu'),
Dense(1,activation='softmax'),
]
)
model.compile(optimizer='sgd', loss='binary_crossentropy', metrics=['accuracy'])
history = model.fit(X_train, y_train, batch_size=64, epochs=100, validation_data=(X_val, y_val))
我的代码是不是做错了什么?我知道一些 python 但我只是出于自己的目的在教程的基础上进行了构建。
你的代码有几个问题。
第一行:
Dense(1,activation='softmax')
这一行每次都会导致输出1
。所以即使你在做分类,如果你有 2 类,你的准确率也会是 50%。 Softmax
输出的总和将等于一。所以将它与一个神经元一起使用是没有意义的。
您需要更改损失和指标,因为这是一个回归。
loss='mse', metrics=['mse']
此外,您的输出神经元应该是线性的,这意味着不需要任何激活函数。它应该是这样的:
Dense(1)