gpt4 book ai didi

python - Keras:在新实验中重复使用经过训练的权重

转载 作者:行者123 更新时间:2023-11-30 09:16:38 25 4
gpt4 key购买 nike

我对 Keras 还很陌生,所以对于任何愚蠢的错误提前表示歉意。我目前正在尝试在两个数据集之间尝试一些好的旧的跨域迁移学习。我这里有一个模型,它是在我生成的语音识别数据集上训练和执行的(代码位于这个问题的底部,因为它很长)

如果我要在不同的数据集上训练一个新模型(例如 model_2),那么我将从权重的初始随机分布中获得基线。

我想知道,是否可以训练 model_1 和 model_2,这是我不知道该怎么做的一点;我可以从 model_1 中获取两个 256 和 128 密集层(带有经过训练的权重)并将它们用作 model_3 的起点 - model_3 是数据集 2,具有来自 model_1 的初始权重分布?

所以,最后,我有以下内容:

  1. Model_1 从随机分布开始,并在数据集 1 上进行训练
  2. Model_2 从随机分布开始,并在数据集 2 上进行训练
  3. Model_3 从 Model_1 中训练的分布开始,并在数据集 2 上进行训练。

我的问题是,我将如何执行上述步骤 3?我不想卡住权重,我只想根据过去的实验获得初始训练分布

任何帮助将不胜感激。谢谢你!如果我没有说清楚我的目的,请道歉

我训练 Model_1 的代码如下:

import numpy
import pandas
from keras.models import Sequential
from keras.layers import Dense
from keras.callbacks import EarlyStopping
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import KFold
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
import matplotlib.pyplot as plt
from keras.utils import np_utils
from keras.layers.normalization import BatchNormalization

import time
start = time.clock()



# fix random seed for reproducibility
seed = 1
numpy.random.seed(seed)

# load dataset
dataframe = pandas.read_csv("voice.csv", header=None)
dataset = dataframe.values
# split into input (X) and output (Y) variables
numVars = len(dataframe.columns) - 1
numClasses = dataframe[numVars].nunique()
X = dataset[:,0:numVars].astype(float)
Y = dataset[:,numVars]


print("THERE ARE " + str(numVars) + " ATTRIBUTES")
print("THERE ARE " + str(numClasses) + " UNIQUE CLASSES")




# encode class values as integers
encoder = LabelEncoder()
encoder.fit(Y)
encoded_Y = encoder.transform(Y)

# convert integers to dummy variables (i.e. one hot encoded)
dummy_y = np_utils.to_categorical(encoded_Y)


calls = [EarlyStopping(monitor='acc', min_delta=0.0001, patience=100, verbose=2, mode='max', restore_best_weights=True)]

# define baseline model
def baseline_model():
# create model

model = Sequential()

model.add(BatchNormalization())

model.add(Dense(256, input_dim=numVars, activation='sigmoid'))

model.add(Dense(128, activation='sigmoid'))

model.add(Dense(numClasses, activation='softmax'))
# Compile model
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model


estimator = KerasClassifier(build_fn=baseline_model, epochs=2000, batch_size=1000, verbose=1)
kfold = KFold(n_splits=10, shuffle=True, random_state=seed)
results = cross_val_score(estimator, X, dummy_y, cv=kfold, fit_params={'callbacks':calls})
print("Baseline: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))
#your code here
print (time.clock() - start)

PS:两个数据集的输入属性和输出都相同,唯一改变的是属性值。我很好奇,如果两个数据集具有不同数量的输出类,可以这样做吗?

最佳答案

简而言之,要从 Model_1 微调 Model_3,只需在 model.compile( ...)。当然,你必须先保存训练好的Model_1。

如果我理解正确,那么两个数据集中具有相同数量的特征和类,因此您甚至不需要重新设计模型。如果您有不同的类集,则必须为 Model_1 和 Model_3 的最后一层指定不同的名称:

model.add(Dense(numClasses, activation='softmax', name='some_unique_name'))

关于python - Keras:在新实验中重复使用经过训练的权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54504138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com