Я пытаюсь изменить код кераса для нейронной сети на код тензорного потока.Я выбрал несколько фрагментов, используя керас для глубокой сарсы, как показано ниже.
весь код керасы для модели:
model = Sequential()
model.add(Dense(30, input_dim=15, activation='relu'))
model.add(Dense(30, activation='relu'))
model.add(Dense(5, activation='linear'))
model.summary()
model.compile(loss='mse', optimizer=Adam(lr=self.learning_rate))
весь код тензорного потока для модели:
W1 = tf.Variable(tf.random_uniform([15, 30], -1., 1.))
W2 = tf.Variable(tf.random_uniform([30, 30], -1., 1.))
W3 = tf.Variable(tf.random_uniform([30, 5], -1., 1.))
b1 = tf.Variable(tf.zeros([30]))
b2 = tf.Variable(tf.zeros([30]))
b3 = tf.Variable(tf.zeros([5]))
L1 = tf.add(tf.matmul(X, W1), b1)
L1 = tf.nn.relu(L1)
L2 = tf.add(tf.matmul(L1, W2), b2)
L2 = tf.nn.relu(L2)
model = tf.add(tf.matmul(L2, W3),b3)
cost = tf.reduce_mean(tf.squared_difference(model,Y))
optimizer = tf.train.AdamOptimizer(learning_rate=0.01)
train_op = optimizer.minimize(cost)
Но яВыяснилось, что масштабы вывода моделей сильно отличаются между ними.Например, выход кода ниже keras составляет [0,4208471 -0,58310926 0,00578364 0,09069238 -1,1442541], а тензор потока равен [9,947895 39,215603 -23,376497 21,344461 -7,0058045].Дело в том, что производительность keras намного лучше, чем у кода tenorflow.
Мой вопрос заключается в том, что именно он делает в keras model.add с линейной активацией.Я предполагаю, что некоторая нормализация сделана.Я сделал rando_uniform для инициализации уйтов, но я не уверен, что random_normal лучше, чем он.Во всяком случае, я хочу точно знать и как преобразовать его в код тензорного потока.
[keras]
model.add(Dense(5, activation='linear'))
[changed with tensorflow]
W3 = tf.Variable(tf.random_uniform([30, 5], -1., 1.))
b3 = tf.Variable(tf.zeros([5]))
tf.add(tf.matmul(L2, W3),b3)
Я пытался использовать tf.keras.activation.linear, но все равно кажется, что он немного другой.
Заранее спасибо.