【发布时间】:2021-05-01 20:03:11
【问题描述】:
我是 Keras 的新手,遇到了一个我不明白的问题,到目前为止我在互联网上也找不到任何解决方案。
我使用以下几行代码在 UrbanSound8K 数据集上训练一个简单的模型:
x_train, y_train, _, _ = load_data(["data_1.pickle", "data_5.pickle"])
#x_train, _, y_train, _ = train_test_split(x_train, y_train, test_size=0.01, random_state = 0, shuffle=True)
model = Sequential()
model.add(Dense(256, input_shape=(40,)))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(256))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(10))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', metrics=['accuracy'], optimizer='adam')
model.fit(x_train, y_train, validation_split=0.2, batch_size=32, epochs=50, shuffle=True)
当我训练这个模型时,它达到了大约 50% 的 val_accuracy。将 model.fit() 中的 shuffle 更改为 False 似乎没有任何影响。
但是,当我取消注释第二行并使用x_train, _, y_train, _ = train_test_split(x_train, y_train, test_size=0.01, random_state = 0, shuffle=True) 对数据集进行洗牌时,模型的 val_accuracy 达到了 80% 以上!无论model.fit() shuffle 设置为True 还是False。
这怎么可能?在拟合模型之前对数据进行洗牌应该没有任何区别,因为它的训练数据在每个时期之前都会被洗牌?还是我误解了model.fit()的参数shuffle?或者train_test_split()有什么额外的魔法发生?
【问题讨论】:
标签: python tensorflow machine-learning keras shuffle