繁体   English   中英

如何使用 Keras 的功能 api 优化 model

[英]How to optimize a model using the functional api of Keras

我正在尝试使用 Keras 的功能 api 构建一个 model。这是我制作的整个 model。 我不确定它是否正确,如果有人能看一下,我会很高兴。

我首先将数据拆分为训练和测试数据集。

from sklearn.model_selection import train_test_split

X1_train, X1_test, X2_train, X2_test, y_train, y_test = train_test_split(X1_scaled, X2_scaled, end_y, test_size=0.2)

[i.shape for i in (X1_train, X1_test, X2_train, X2_test, y_train, y_test)]

这是我开始构建 model 的部分

from tensorflow.keras import layers, Model, utils


# Build the model
input1 = layers.Input((10, 6))
input2 = layers.Input((10, 2, 5))
x1 = layers.Flatten()(input1)
x2 = layers.Flatten()(input2)

concat = layers.concatenate([x1, x2])

# Add hidden and dropout layers
hidden1 = layers.Dense(64, activation='relu')(concat)
hid1_out = layers.Dropout(0.5)(hidden1)
hidden2 = layers.Dense(32, activation='relu')(hid1_out)
hid2_out = layers.Dropout(0.5)(hidden2)
output = layers.Dense(1, activation='sigmoid')(hid2_out)

model = Model(inputs=[input1, input2], outputs=output)

# summarize layers
print(model.summary())

# compile the model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])


# fit the keras model on the dataset
history = model.fit([X1_train, X2_train], y_train, epochs=200, batch_size=5, verbose=0, validation_data=([X1_test, X2_test], y_test))

# evaluate the keras model
_, train_accuracy = model.evaluate([X1_train, X2_train], y_train, verbose=0)
_, test_accuracy = model.evaluate([X1_test, X2_test], y_test, verbose=0)
print('Accuracy NN: %.2f' % (train_accuracy*100))
print('Accuracy NN: %.2f' % (test_accuracy*100))

这里出现问题。 没有显示 plot。

# Plots
from matplotlib import pyplot

pyplot.subplot(211)
pyplot.title('Loss')
pyplot.plot(history.history['loss'], label='train')
pyplot.plot(history.history['val_loss'], label='test')
pyplot.legend()

# plot accuracy
pyplot.subplot(212)
pyplot.title('Accuracy')
pyplot.plot(history.history['accuracy'], label='train')
pyplot.plot(history.history['val_accuracy'], label='test')
pyplot.legend()
pyplot.show(`

有人可以给我任何关于如何管理它的提示吗?
谢谢你给我一些时间

下面是 function 的代码,它将并排生成两个图。 第一个 plot 显示了训练损失和验证损失与时期的关系。 第二个 plot 显示训练准确度和验证准确度与时期的关系。 它还在第一个 plot 中放置一个点,表示验证损失最低的时期,在第二个 plot 中放置一个点,表示验证精度最高的时期。

def tr_plot(history):
    #Plot the training and validation data
    tacc=history.history['accuracy']
    tloss=history.history['loss']
    vacc=history.history['val_accuracy']
    vloss=history.history['val_loss']
    Epoch_count=len(tacc)
    Epochs=[]
    for i in range (Epoch_count):
        Epochs.append(i+1) 
    index_loss=np.argmin(vloss)#  this is the epoch with the lowest validation loss
    val_lowest=vloss[index_loss] # lowest validation loss value
    index_acc=np.argmax(vacc)  # this is the epoch with the highest training accuracy
    acc_highest=vacc[index_acc] # this is the highest accuracy value
    plt.style.use('fivethirtyeight')
    sc_label='best epoch= '+ str(index_loss+1 )
    vc_label='best epoch= '+ str(index_acc + 1)
    fig,axes=plt.subplots(nrows=1, ncols=2, figsize=(20,8))
    axes[0].plot(Epochs,tloss, 'r', label='Training loss')
    axes[0].plot(Epochs,vloss,'g',label='Validation loss' )
    axes[0].scatter(index_loss+1 ,val_lowest, s=150, c= 'blue', label=sc_label)
    axes[0].set_title('Training and Validation Loss')
    axes[0].set_xlabel('Epochs')
    axes[0].set_ylabel('Loss')
    axes[0].legend()
    axes[1].plot (Epochs,tacc,'r',label= 'Training Accuracy')
    axes[1].plot (Epochs,vacc,'g',label= 'Validation Accuracy')
    axes[1].scatter(index_acc+1 ,acc_highest, s=150, c= 'blue', label=vc_label)
    axes[1].set_title('Training and Validation Accuracy')
    axes[1].set_xlabel('Epochs')
    axes[1].set_ylabel('Accuracy')
    axes[1].legend()
    plt.tight_layout
    plt.show()

结果 plot 看起来像这样这里。

暂无
暂无

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

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