微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

与 DNN 分类的交叉验证

如何解决与 DNN 分类的交叉验证

我有一段代码可以用 TensorFlow 获得 DNN 分类的准确性,实际上,我有两个类。训练和测试的过程由sklearn.model_selection中的train_test_split完成。 现在我想使用分层交叉验证而不是 train_test_split。我试过的是我用过的 sklearn.model_selection 中的 cross_val_score

model = learn.DNNClassifier(hidden_units=[5],n_classes=3,feature_columns=feature_columns,)
    scores = cross_val_score(estimator=model,X,y,scoring = 'accuracy',cv=5,fit_params={'steps': 1000},verbose=100)

然而我偶然发现了一个错误告诉 tf. estimator.DNNClassifier 没有 fit 方法。 我怎样才能达到我的目的?

解决方法

基于 this,您应该使用 model.train 而不是 model.fit。但是,与 DNNClassifier 不同,Sequential 模型或 Functional API 更为常见。你可以用这些来做model.fit

For example,

inputs = keras.Input(shape=(784,),name="digits")
x = layers.Dense(64,activation="relu",name="dense_1")(inputs)
x = layers.Dense(64,name="dense_2")(x)
outputs = layers.Dense(10,activation="softmax",name="predictions")(x)

model = keras.Model(inputs=inputs,outputs=outputs)
history = model.fit(
    x_train,y_train,batch_size=64,epochs=2,# We pass some validation for
    # monitoring validation loss and metrics
    # at the end of each epoch
    validation_data=(x_val,y_val),)

或者(来自我的仓库的 quick project):

model = Sequential()
model.add(layers.Embedding(vocab_size,embedding_dim,weights=[embedding_matrix],input_length=maxlen,trainable=True))
model.add(layers.Conv1D(256,3,activation='relu'))
model.add(Dropout(0.2))
model.add(layers.GlobalMaxPooling1D())
model.add(layers.Dense(28,activation='sigmoid'))
model.compile(optimizer=optimizers.Adam(lr=0.0002),loss='binary_crossentropy',metrics=["accuracy",metrics.Precision(name="precision"),metrics.Recall(name="recall") ])
model.summary()

callbacks = [EarlyStopping(monitor='val_loss',patience=2),ModelCheckpoint(filepath='best_model.h5',monitor='val_loss',save_best_only=True)]
fit = model.fit(X_train,epochs=15,verbose=True,callbacks=callbacks,validation_data=(X_test,y_test),batch_size=100)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。