#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,))
(ничего после запятой)