【问题标题】:Keras neural network prediction not workingKeras 神经网络预测不起作用
【发布时间】:2019-09-10 13:43:48
【问题描述】:

我使用 keras 和 tensorflow 创建了一个项目。我使用了 NSL KDD 数据集并用 python 编写了我的项目。我还使用了 SGD 优化器。

我想拟合一个模型,然后对其进行评估,然后检查其准确性。 (所以我可以将其与机器学习的结果进行比较)。

下面是我的完整代码,请查看。

import tensorflow as tf
from keras import backend as K

from tensorflow.python.saved_model import builder as saved_model_builder
from tensorflow.python.saved_model import tag_constants, signature_constants, signature_def_utils_impl

from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.optimizers import SGD
import numpy as np
sess = tf.Session()
K.set_session(sess)
K.set_learning_phase(0)
model_version = "2"


import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# Importing the dataset
dataset = pd.read_csv('KDD_Dataset.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 41:42].values
# Encoding categorical data X
from sklearn.preprocessing import LabelEncoder
labelencoder_X = LabelEncoder()
X[:,0] = labelencoder_X.fit_transform(X[:,0])
X[:,1] = labelencoder_X.fit_transform(X[:,1])
X[:,2] = labelencoder_X.fit_transform(X[:,2])
#
from sklearn.preprocessing import OneHotEncoder
onehotencoder_0 = OneHotEncoder(categorical_features=[0])
onehotencoder_1 = OneHotEncoder(categorical_features=[1])
onehotencoder_2 = OneHotEncoder(categorical_features=[2])
X = onehotencoder_0.fit_transform(X).toarray()
X = onehotencoder_1.fit_transform(X).toarray()
X = onehotencoder_2.fit_transform(X).toarray()

# Encoding categorical data y
from sklearn.preprocessing import LabelEncoder
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)
max(y)

# Splitting the dataset into the Training set and Test set
#from sklearn.cross_validation import train_test_split
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, 
                                                    test_size = 0.2, 
                                                    random_state = 0)
# create the model
model = Sequential()
model.add(Dense(41, input_dim=8, init='uniform', activation='relu'))
model.add(Dense(20, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
# compile the model

model.compile(loss='binary_crossentropy', optimizer=sgd,metrics=['accuracy'])

model.fit(X_train, y_train, validation_data=(X_test, y_test), nb_epoch=200, batch_size=5, verbose=0)

【问题讨论】:

  • 你需要告诉我们什么是行不通的。
  • model.fit(X_train, y_train, validation_data=(X_test, y_test), nb_epoch=200, batch_size=5, verbose=0) 这不起作用
  • 不,您需要用文字告诉我们“不工作是什么意思”。您收到错误消息吗?意想不到的结果?等等。
  • 哦,我得到了:检查输入时出错:预期的 dense_6_input 的形状为 (8,) 但得到的数组的形状为 (45,)
  • 编辑您的原始问题并解释什么不起作用。

标签: tensorflow keras scikit-learn deep-learning


【解决方案1】:

参见 Dense(41, input_dim=8, init='uniform', activation='relu') 您定义的模型有 8 个特征,但是您的输入有 45 个特征。它们不匹配。您必须使您的模型具有 45 个特征以匹配输入,或者将输入特征的长度减少到 8 个以匹配您的模型。

【讨论】:

  • 好的!现在我添加了我的模型 45 dim.. model = Sequential() model.add(Dense(input_dim=45, init='uniform', activation='relu', output_dim = 20)) model.add(Dense(ouput_dim= 20, init='uniform', activation='relu')) model.add(Dense(output_dim=39, init='uniform', activation='sigmoid')) 但它给出错误 __init__() missing 1 required positional argument : '单位'
  • 你需要保留每层的节点数,也就是错误信息中的'units'。试试这个 model.add(Dense(41, input_dim=45, init='uniform', activation='relu')) model.add(Dense(20, init='uniform', activation='relu')) 模型。 add(Dense(1, init='uniform', activation='sigmoid'))
【解决方案2】:

换行

model.add(Dense(41, input_dim=8, init='uniform', activation='relu'))

model.add(Dense(42, input_dim=42, init='uniform', activation='relu'))

优化器=sgd 到优化器='sgd'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 2017-12-02
    • 2017-11-21
    相关资源
    最近更新 更多