Exact Model Converging On Keras-tf But Not On Keras
Solution 1:
This might be because of difference (1 liner) in implementation of SimpleRNN, between TF Keras and Native Keras.
The Line mentioned below is implemented in TF Keras and is not implemented in Keras.
self.input_spec = [InputSpec(ndim=3)]
One case of this difference is that mentioned by you above.
I want to demonstrate similar case, using Sequential
class of Keras.
Below code works fine for TF Keras:
from tensorflow import keras
import numpy as np
from tensorflow.keras.models import Sequential as Sequential
np.random.seed(1337) # for reproducibility
def run_avg(signal, alpha=0.2):
avg_signal = []
avg = np.mean(signal)
for i, sample in enumerate(signal):
if np.isnan(sample) or sample == 0:
sample = avg
avg = (1 - alpha) * avg + alpha * sample
avg_signal.append(avg)
return np.array(avg_signal)
def train():
x = np.random.rand(3000)
y = run_avg(x)
x = np.reshape(x, (-1, 1, 1))
y = np.reshape(y, (-1, 1))
# SimpleRNN model
model = Sequential()
model.add(keras.layers.Input(batch_shape=(1, 1, 1), dtype='float32'))
model.add(keras.layers.SimpleRNN(1, stateful=True, activation=None, name='rnn_layer_1'))
model.compile(optimizer=keras.optimizers.SGD(lr=0.1), loss='mse')
model.summary()
print(model.get_layer('rnn_layer_1').get_weights())
model.fit(x=x, y=y, batch_size=1, epochs=10, shuffle=False)
print(model.get_layer('rnn_layer_1').get_weights())
train()
But if we run the same using Native Keras, we get the error shown below:
TypeError: The added layer must be an instance of class Layer. Found: Tensor("input_1_1:0", shape=(1, 1, 1), dtype=float32)
If we replace the below line of code
model.add(Input(batch_shape=(1, 1, 1), dtype='float32'))
with the code below,
model.add(Dense(32, batch_input_shape=(1,1,1), dtype='float32'))
even the model
with Keras implementation converges almost similar to TF Keras implementation.
You can refer the below links if you want to understand the difference in implementation from code perspective, in both the cases:
https://github.com/keras-team/keras/blob/master/keras/layers/recurrent.py#L1082-L1091
Post a Comment for "Exact Model Converging On Keras-tf But Not On Keras"