У меня есть набор данных, который содержит 1 значение y_true
для случая.Я хочу построить DNN
, который выводит 3 коэффициента, которые позже будут использоваться следующим образом для создания y_pred
y_pred = 4*coeff_1 + 5*coeff_2 + 6 *coeff_3
Я использую keras
, и когда я попытался определить пользовательскую функцию, подобную этой
from keras.callbacks import ModelCheckpoint
from keras.layers import advanced_activations
from keras.models import Sequential
from keras.layers import Dense, Activation, Flatten
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
import keras.backend as K
def custom_objective(layer):
return K.sum(layer.output)
NN_model = Sequential()
# The Input Layer :
NN_model.add(Dense(X_train.shape[1], kernel_initializer='normal',input_dim = X_train.shape[1], activation='relu'))
# The Hidden Layers :
NN_model.add(Dense(20, kernel_initializer='normal',activation='elu'))
NN_model.add(Dense(20, kernel_initializer='normal',activation='elu'))
output_layer = Dense(1, kernel_initializer='normal',activation='linear')
# The Output Layer :
NN_model.add(output_layer)
# Compile the network :
NN_model.compile(loss=custom_objective(output_layer), optimizer='Adamax', metrics=['mean_absolute_error'])
NN_model.summary()
NN_model.fit(X_train, y_train, epochs=10,verbose = 1)
print('NN train = ', mean_absolute_error(y_train , NN_model.predict(X_train)))
predictions = NN_model.predict(X_test)
MAE = mean_absolute_error(y_test , predictions)
print('NN MAE = ', MAE)
Я получаю все
TypeError: Использование tf.Tensor
в качестве Python bool
не допускается.Используйте if t is not None:
вместо if t:
, чтобы проверить, определен ли тензор, и используйте операции TensorFlow, такие как tf.cond, для выполнения подграфов, обусловленных значением тензора.
Так что мой вопрос
Как я могу определить DNN
, который будет принимать 1 y_true
на данные, вывести 3 значения, которые будут линейно объединены, чтобы собрать y_pred
, который будет использоваться для получения функции потерь и обучениясеть
Спасибо за ваше время