如果我喂型五个Setosa花,我不能让我的模型来预测他们确实Setosas。
这里是我的代码设置:
# Load libraries
import numpy as np
import pandas as pd
from keras import models
from keras import layers
from keras.models import Sequential
from keras.layers import Dense
from sklearn.utils import shuffle
from sklearn import preprocessing
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV
# Set random seed
np.random.seed(0)
# Step 1: Load data
iris = pd.read_csv("iris.csv")
X = iris.drop('species', axis=1)
y = pd.get_dummies(iris['species']).values
# Step 2: Preprocess data
scaler = preprocessing.StandardScaler()
X = scaler.fit_transform(X)
X, y = shuffle(X, y)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
network = models.Sequential()
network.add(layers.Dense(units=8, activation="relu", input_shape=(4,)))
network.add(layers.Dense(units=3, activation="softmax"))
# Compile neural network
network.compile(loss="categorical_crossentropy",
optimizer="adam",
metrics=["accuracy"])
# Train neural network
history = network.fit(X_train, # Features
y_train, # Target
epochs= 200,
verbose= 1,
batch_size=10, # Number of observations per batch
validation_data=(X_test, y_test)) # Test data
训练很好的模型,这里是最后的时期:
Epoch 200/200
112/112 [==============================] - 0s 910us/step - loss: 0.0740 - acc: 0.9911 - val_loss: 0.1172 - val_acc: 0.9737
现在,让我们拉了一些预测。
new_iris = iris.iloc[0:5, 0:4] # pull out the first five Setosas from original iris dataset;
# prediction should give me Setosa since I am feeding it Setosas
np.around(network.predict(new_iris), decimals = 2) # predicts versicolor with high probability
array([[0. , 0.95, 0.04],
[0. , 0.94, 0.06],
[0. , 0.96, 0.04],
[0. , 0.91, 0.09],
[0. , 0.96, 0.04]], dtype=float32)\
任何想法,为什么是这样的情况?
您需要在应用测试时间训练期间学习的转变。
new_iris = iris.iloc[0:5, 0:4] # pull out the first five Setosas from original iris dataset;
new_iris = scaler.transform(new_iris)
np.around(network.predict(new_iris), decimals = 2)
输出
array([[1. , 0. , 0. ],
[0.99, 0.01, 0. ],
[1. , 0. , 0. ],
[0.99, 0.01, 0. ],
[1. , 0. , 0. ]], dtype=float32)