我试图打印在DataFrame中失去的功能和准确性的结果。但是,我只想保持每次迭代中所有历元的最大验证精度。因此,如果我有3个周期的2次迭代,我希望只保留2行。
#Hyperparameters
lr = [0.001,0.005,0.01,0.02]
bs = [25,50,75,100]
neurons=[8,10,12]
optimizer=['keras.optimizers.Adam','keras.optimizers.SGD','keras.optimizers.RMSprop']
results = []
for x in range(2):
lr_rand=random.choice(lr)
bs_rand=random.choice(bs)
opt_rand=random.choice(optimizer)
neu_rand=random.choice(neurons)
model = Sequential()
model.add(Flatten(input_shape=[28, 28]))
model.add(Dense(neu_rand, activation="relu"))
model.add(Dense(neu_rand, activation="relu"))
model.add(Dense(neu_rand, activation="relu"))
model.add(Dense(10, activation="softmax"))
model.summary()
model.compile(loss=keras.losses.sparse_categorical_crossentropy,
optimizer=eval(opt_rand)(learning_rate=lr_rand),
metrics=[keras.metrics.sparse_categorical_accuracy])
hy=model.fit(x_train_scaled, y_train, batch_size=bs_rand, epochs=3, validation_data=(x_valid_scaled, y_valid))
pd.DataFrame(hy.history).plot(figsize=(16, 8), ls='-')
plt.grid(True)
plt.gca().set_ylim(0, 1.01)
plt.title("Lost Function and Accuracy for training and validation: Learning rate:{:3.1f}%, {}, Batch Size: {}, Neurons : {}".format(lr_rand*100,opt_rand,bs_rand,neu_rand))
plt.show()
当我打印这段代码时,我将得到两个3周期的网格(我只为简化运行时间,直到得到问题的答案为止)。因此,很明显,一旦我找到了解决问题的办法,我就会增加它)。
我试着把它添加到我的代码中,但是它不起作用
results.append(hy.history)
results = pd.concat(results)
results
所以我试着去了解它是如何工作的。当我使用这个代码时:
results = pd.DataFrame(results)
我得到了
所以,我想知道如何在dataframe中获得列表的最大值。我希望每个单元格只看到一个值。
发布于 2022-10-02 23:36:36
我认为您需要添加几行代码,如下所示。
iteration_hist = hy.history
max_accuracy_index = np.argmax(iteration_hist['accuracy'])
results.append(pd.DataFrame({"loss":[iteration_hist["loss"][max_accuracy_index]],
"sparse_categorical_accuracy": [iteration_hist["sparse_categorical_accuracy"][max_accuracy_index]],
"val_loss": [iteration_hist["val_loss"][max_accuracy_index]],
"val_sparse_categorical_accuracy": [iteration_hist["val_sparse_categorical_accuracy"][max_accuracy_index]]
}))
https://stackoverflow.com/questions/73915705
复制相似问题