深度学习-第R1周心脏病预测( 三 )


=128: 这个参数表示在每个迭代(epoch)中,将训练数据划分为大小为 128 的小批次 。每个小批次会包含 128 个样本(数据点)和对应的标签(目标变量) 。
小批量梯度下降是梯度下降算法的一种改进版本 。传统的梯度下降算法在每次迭代中使用所有训练数据来更新模型的参数,这样的算法被称为批量梯度下降(Batch) 。但是,当数据集非常大时,批量梯度下降的计算代价会很高,而且每次迭代只能进行一次参数更新 。
小批量梯度下降通过将数据分成多个小批次,每个小批次包含部分训练数据,从而实现更高效的参数更新 。在每次迭代中,模型将对每个小批次的样本计算损失函数并求取梯度,然后将这些梯度的平均值用于更新模型的参数 。这样的做法使得每个迭代可以进行多次参数更新,从而更快地收敛到最优解 。
的选择
通常需要根据具体的问题和硬件资源进行权衡 。较小的可能会导致模型更新不稳定,但可以更快地收敛 。较大的可能会更稳定,但可能需要更多的内存和计算资源 。常见的大小通常是 32、64、128、256 等 。
=(, ) :是用于在每个 epoch 结束后评估模型在测试集上的性能 。它用于监控模型的泛化能力,即模型在未见过的测试数据上的表现 。在训练过程中,模型使用训练集数据进行参数更新,而测试集数据仅用于评估模型性能,不会参与参数更新 。
评估性能主要包括以下指标:
1. 损失函数(Loss)
损失函数是模型在训练数据上的表现,它衡量模型输出与真实标签之间的差异 。在这里,使用的损失函数是二分类问题的交叉熵( cross-) 。在训练过程中,模型会尝试最小化损失函数,使得模型预测尽可能接近真实标签 。
2. 准确率()
准确率是模型在测试数据上的表现,它表示模型预测正确的样本比例 。准确率是分类任务中最常用的评估指标之一 。
3. 其它指标
除了损失函数和准确率,还可以使用其它一些指标来评估模型性能,具体根据任务的要求而定 。例如,对于多分类问题,还可以使用精确率()、召回率()、F1 分数等指标来衡量模型的表现 。
在每个 epoch 结束后,模型会根据测试集数据计算损失函数和评估指标,并输出这些指标的值 。通过观察这些指标的变化,可以了解模型在训练过程中的性能变化,是否出现过拟合或欠拟合等问题 。当模型的性能在测试集上表现稳定且令人满意时,可以停止训练,得到一个较好的泛化模型 。
运行结果:
需要注意的是=(13, 1) 和 =128 之间没有直接联系,它们分别用于不同的目的 五、模型评估 实验代码:
#模型评估import matplotlib.pyplot as pltacc = history.history['accuracy']val_acc = history.history['val_accuracy']loss = history.history['loss']val_loss = history.history['val_loss']epochs_range = range(epochs)plt.figure(figsize=(14,4))plt.subplot(1,2,1)plt.plot(epochs_range, loss, label = 'Training Accuracy')plt.plot(epochs_range, val_acc, label='Validation Accuracy')plt.legend(loc='lower right')plt.title('Training and Validation Accuracy')plt.subplot(1, 2, 2)plt.plot(epochs_range, loss, label='Training Loss')plt.plot(epochs_range, val_loss, label='Validation Loss')plt.legend(loc='upper right')plt.title('Training and Validation Loss')plt.show()
运行结果:
完整代码
import tensorflow as tfimport pandas as pdimport numpy as npdf = pd.read_csv("D:\R1heart.csv")from sklearn.preprocessing import StandardScalerfrom sklearn.model_selection import train_test_splitX = df.iloc[:,:-1]y = df.iloc[:,-1]#划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.1, random_state = 1) #标准化处理sc = StandardScaler()X_train = sc.fit_transform(X_train)X_test = sc.transform(X_test)X_train = X_train.reshape(X_train.shape[0],X_train.shape[1],1)X_test = X_test.reshape(X_test.shape[0], X_test.shape[1],1)import tensorflowfrom tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Dense,LSTM,SimpleRNN#model = Sequential()#model.add(SimpleRNN(200,input_shape=(13,1),activation = 'relu'))#model.add(Dense(100, activation = 'relu'))#model.add(Dense(1,activation = 'sigmoid'))model = Sequential()model.add(SimpleRNN(128, input_shape= (13,1),return_sequences=True,activation='relu'))model.add(SimpleRNN(64,return_sequences=True, activation='relu'))model.add(SimpleRNN(32, activation='relu'))model.add(Dense(64, activation='relu'))model.add(Dense(1, activation='sigmoid'))model.summary()opt = tf.keras.optimizers.Adam(learning_rate = 1e-4)model.compile(loss = 'binary_crossentropy',optimizer = opt,metrics = "accuracy")epochs = 100history = model.fit(X_train,y_train,epochs = epochs,batch_size = 128,validation_data = http://www.kingceram.com/post/(X_test,y_test),verbose = 1)#模型评估import matplotlib.pyplot as pltacc = history.history['accuracy']val_acc = history.history['val_accuracy']loss = history.history['loss']val_loss = history.history['val_loss']epochs_range = range(epochs)plt.figure(figsize=(14,4))plt.subplot(1,2,1)plt.plot(epochs_range, loss, label = 'Training Accuracy')plt.plot(epochs_range, val_acc, label='Validation Accuracy')plt.legend(loc='lower right')plt.title('Training and Validation Accuracy')plt.subplot(1, 2, 2)plt.plot(epochs_range, loss, label='Training Loss')plt.plot(epochs_range, val_loss, label='Validation Loss')plt.legend(loc='upper right')plt.title('Training and Validation Loss')plt.show()#准确率评估scores = model.evaluate(X_test, y_test, verbose=0)print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))