繁体   English   中英

神经网络 output 的两个错误

[英]two errors with neural network output

在此处输入图像描述

大家好,我制作了一个神经网络 model 来预测列 label

我做了以下步骤

df=pd.read_csv('fortest.csv',low_memory=False, error_bad_lines = False)
dataset = df.values
X = dataset[:,1:8]

X.shape
min_max_scaler =MinMaxScaler()
X_scale= min_max_scaler.fit_transform(X)
X_train, X_val_and_test, Y_train, Y_val_and_test = train_test_split(X_scale, Y, test_size=0.3)
X_val, X_test, Y_val, Y_test = train_test_split(X_val_and_test, Y_val_and_test, test_size=0.5)

# then make the neural using functional API

model = keras.Sequential()
model.add(layers.Dense(6, input_dim=6, activation='relu'))
model.add(layers.Dense(3, activation='relu',kernel_regularizer=regularizers.l2(0.01)))
model.add(layers.Dense(3, activation='relu'))
model.add(layers.Dropout(0.1))
model.add(layers.Dense(1, activation='sigmoid', name='class'))
model.compile(loss='categorical_crossentropy',loss_weights={'class':0.5}, optimizer='adam', metrics=['accuracy'])
hist = model.fit(X_train, Y_train, batch_size=3, epochs=100, validation_data=(X_val, Y_val))


plt.plot(hist.history['accuracy'])
plt.plot(hist.history['val_acc'])
plt.title('Model accuracy')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'Val'], loc='lower right')
plt.show()


plt.plot(hist.history['loss'])
plt.plot(hist.history['val_loss'])
plt.title('Model loss')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.legend(['Train', 'Val'], loc='upper right')
plt.show()


model.evaluate(X_test, Y_test)[1]
y_pred = model.predict(X_test)

这段代码我有两个问题首先当我运行这部分时

 plt.plot(hist.history['accuracy'])
    plt.plot(hist.history['val_acc'])
    plt.title('Model accuracy')
    plt.ylabel('Accuracy')
    plt.xlabel('Epoch')
    plt.legend(['Train', 'Val'], loc='lower right')
    plt.show()

它引发错误,因为它没有识别 Val_acc 但它看到 val_loss > 为什么会这样?

第二,当我尝试让 Y_pred 使用以下代码计算精度、召回率等时

 y_pred = model.predict(X_test)

它给了我 y_pred 作为连续变量,如 (0.093,0.933) 而不是 (0 和 1) 所以它在计算任何指标时给我错误>>现在任何一个为什么这些错误会引起任何帮助将不胜感激

1-使用loss=model.history.history并在此字典中通过loss.keys()检查键以查看 val_acc 是否存在。

2- your last layer is a sigmoid function and the output of a sigmoid function is a probability between 0 and 1.to make it binary you can choose 2 ways: - model.predict_classes(X_test) - predictions=y_pred>threshold this gives you可以在度量中使用的 True False 向量。 阈值是可选的,取决于上下文,但您可以使用.5 作为通用阈值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM