L2-нормализация с помощью серверной части Keras?

#tensorflow #keras #lambda #model #normalization

#tensorflow #keras #лямбда #Модель #нормализация

Вопрос:

Я хотел бы нормализовать входные данные, поступающие в мою нейронную сеть, но, поскольку я определяю свою модель таким образом:

 df = pd.read_csv(r'C:UsersDavide MoriPycharmProjectspythonProjectDataset.csv')
print(df)


target_column = ['W_mag', 'W_phase']
predictors = list(set(list(df.columns)) - set(target_column))
X = df[predictors].values
Y = df[target_column].values

def get_model(n_inputs, n_outputs):
    model = Sequential()
    model.add(Dense(1000,input_dim= n_inputs, activation='relu'))
    #model.add(Lambda(lambda x: K.l2_normalize(x, axis=1)))
    model.add(Dense(1000, activation='linear', activity_regularizer=regularizers.l1(0.0001)))
    model.add(Activation('relu'))
    model.add(Dense(n_outputs, activation='linear'))
    model.compile(optimizer="adam", loss="mean_squared_error", metrics=["mean_squared_error"])
    model.summary()
    return model

n_inputs, n_outputs = X.shape[1], Y.shape[1]
model = get_model(n_inputs, n_outputs)
# fit the model on all data
model.fit(X, Y, epochs=100, batch_size=1)
  

как мне применить лямбда-слой к моим входным данным? Разве не ошибочна позиция строки с комментариями? Потому что, если я помещу туда лямбда-слой, я нормализую то, что уже «преобразовано» первым скрытым слоем, верно? Как я могу решить эту проблему?

Это ошибка, с которой я сталкиваюсь, когда ставлю лямбда-слой перед всем остальным :

 2020-10-12 15:08:46.036872: I 
tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports 
instructions that this TensorFlow binary was not compiled to use: AVX AVX2
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:Program FilesJetBrainsPyCharm 
2020.2.2pluginspythonhelperspydev_pydev_bundlepydev_umd.py", line 197, 
in runfile
pydev_imports.execfile(filename, global_vars, local_vars)  # execute the 
script
File "C:Program FilesJetBrainsPyCharm 
2020.2.2pluginspythonhelperspydev_pydev_imps_pydev_execfile.py", line 
18, in execfile
exec(compile(contents "n", file, 'exec'), glob, loc)
File "C:/Users/Davide Mori/PycharmProjects/pythonProject/prova_rete_sfs.py", 
line 60, in <module>
model = get_model(n_inputs, n_outputs)
File "C:/Users/Davide Mori/PycharmProjects/pythonProject/prova_rete_sfs.py", 
line 52, in get_model
model.summary()
File "C:UsersDavide MoriAnaconda3envspythonProjectlibsite- 
packagestensorflow_corepythonkerasenginenetwork.py", line 1302, in 
summary
raise ValueError('This model has not yet been built. '
ValueError: This model has not yet been built. Build the model first by 
calling `build()` or calling `fit()` with some data, or specify an 
`input_shape` argument in the first layer(s) for automatic build.
  

Комментарии:

1. Почему вы не можете поместить этот лямбда-слой в качестве первого слоя, т.Е. Перед плотным (1000)?

2. Я написал обратную трассировку в вопросе. Пожалуйста, посмотрите

3. В этом случае перед model.summary() вам необходимо явно задать размер ввода в команде build model.build(n_inputs)

4. запись, которая отправляет мне сообщение об ошибке: TypeError: объект ‘int’ не может быть повторен

5. Ваш n_inputs должен быть кортежем. Если это цифра, попробуйте использовать model.build((n_inputs,)) (ничего после запятой)