如何为神经网络模型创建管道?

数据挖掘 神经网络 深度学习
2022-02-11 02:43:18

我尝试过创建这样的管道,但出现错误

- AttributeError:“管道”对象没有“编译”属性

scaler = StandardScaler()
model = Sequential()

model.add(Dense(120, input_dim=46,activation='relu'))
model.add(Dropout(0.1, noise_shape=None, seed=None))

model.add(Dense(80, activation='relu'))
model.add(Dropout(0.1, noise_shape=None, seed=None))

model.add(Dense(40, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

pipeline = make_pipeline(scaler,model)
pipeline.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])


pipeline.fit(X_train,y_train, epochs=50, batch_size=20, validation_data = (X_test,y_test))

# evaluate the model
scores = pipeline.evaluate(X_test,y_test)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
2个回答

我可以用下面的代码来实现这一点

谢谢@JahKnows

scaler = StandardScaler()
model = Sequential()

model.add(Dense(120, input_dim=46,activation='relu'))
model.add(Dropout(0.1, noise_shape=None, seed=None))

model.add(Dense(80, activation='relu'))
model.add(Dropout(0.1, noise_shape=None, seed=None))

model.add(Dense(40, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

pipeline = Pipeline([("scaler",scaler),("model",model)])
pipeline.fit(X_train,y_train, model__epochs=50, model__batch_size=20, model__validation_data = (X_test,y_test))

# evaluate the model
nn_pred = grid_search.predict(X_test)

print('Accuracy of NN on test is:',accuracy_score(y_test,nn_pred))
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))

您应该在将模型放入管道之前对其进行编译。

scaler = StandardScaler()
model = Sequential()

model.add(Dense(120, input_dim=46,activation='relu'))
model.add(Dropout(0.1, noise_shape=None, seed=None))

model.add(Dense(80, activation='relu'))
model.add(Dropout(0.1, noise_shape=None, seed=None))

model.add(Dense(40, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

pipeline = make_pipeline(scaler,model)
pipeline.fit(X_train,y_train, epochs=50, batch_size=20, validation_data = (X_test,y_test))

# evaluate the model
scores = pipeline.evaluate(X_test,y_test)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))