Anonymous
Код в Python и R с keras3 отличается, я не понимаю? [закрыто]
Сообщение
Anonymous » 15 ноя 2024, 14:51
Я пытаюсь преобразовать этот код, написанный в формате Python, в формат R, но результат отличается, и я не понимаю, почему?
С Python:
Код: Выделить всё
# ---- About dataset
#
max_t = 1000
delta_t = 0.01
features_len = 2
sequence_len = 20
predict_len = 5
# ---- About training
#
scale = .2 # Percentage of dataset to be used (1=all)
train_prop = .8 # Percentage for train (the rest being for the test)
batch_size = 32
epochs = 5
fit_verbosity = 1 # 0 = silent, 1 = progress bar, 2 = one line per epoch
def ladybug_init(s=122):
if s>0 : random.seed(s)
ladybug_init.params_x = [ random.gauss(0.,1.) for u in range(8)]
ladybug_init.params_y = [ random.gauss(0.,1.) for u in range(8)]
def ladybug_move(t):
[ax1, ax2, ax3, ax4, kx1, kx2, kx3, kx4] = ladybug_init.params_x
[ay1, ay2, ay3, ay4, ky1, ky2, ky3, ky4] = ladybug_init.params_y
x = ax1*sin(t*(kx1+20)) + ax2*cos(t*(kx2+10)) + ax3*sin(t*(kx3+5)) + ax4*cos(t*(kx4+5))
y = ay1*cos(t*(ky1+20)) + ay2*sin(t*(ky2+10)) + ay3*cos(t*(ky3+5)) + ay4*sin(t*(ky4+5))
return x,y
# ---- Get positions
#
ladybug_init(s=16)
x,y = 0,0
positions=[]
for t in np.arange(0., max_t, delta_t):
x,y = ladybug_move(t)
positions.append([x,y])
# ---- Build rescaled dataset
#
n = int( len(positions)*scale )
dataset = np.array(positions[:n])
k = int(len(dataset)*train_prop)
x_train = dataset[:k]
x_test = dataset[k:]
# ---- Normalize
#
mean = x_train.mean()
std = x_train.std()
x_train = (x_train - mean) / std
x_test = (x_test - mean) / std
# ---- Create sequences and labels for train and test
#
xs_train, ys_train=[],[]
all_i = np.random.permutation( len(x_train) - sequence_len - 1 )
for i in all_i:
xs_train.append( x_train[ i : i+sequence_len ] )
ys_train.append( x_train[ i+sequence_len+1 ] )
xs_test, ys_test=[],[]
for i in range( len(x_test) - sequence_len - 1):
xs_test.append( x_test[ i : i+sequence_len ] )
ys_test.append( x_test[ i+sequence_len+1 ] )
# ---- Convert to numpy / float16
xs_train = np.array(xs_train, dtype='float16')
ys_train = np.array(ys_train, dtype='float16')
xs_test = np.array(xs_test, dtype='float16')
ys_test = np.array(ys_test, dtype='float16')
model = keras.models.Sequential()
model.add( keras.layers.InputLayer(shape=(sequence_len, features_len)) )
model.add( keras.layers.GRU(200, return_sequences=False, activation='relu') )
model.add( keras.layers.Dense(features_len) )
model.summary()
model.compile(optimizer='rmsprop',
loss='mse',
metrics = ['mae'] )
os.makedirs(f'{run_dir}/models', mode=0o750, exist_ok=True)
save_dir = f'{run_dir}/models/best_model.keras'
savemodel_callback = keras.callbacks.ModelCheckpoint( filepath=save_dir, monitor='val_mae', mode='max', save_best_only=True)
history=model.fit(xs_train,ys_train,
epochs = epochs,
verbose = fit_verbosity,
validation_data = (xs_test, ys_test),
callbacks = [savemodel_callback])
s=random.randint(0,len(x_test)-sequence_len)
sequence = x_test[s:s+sequence_len]
sequence_true = x_test[s:s+sequence_len+1]
sequence_pred = loaded_model.predict( np.array([sequence]), verbose=fit_verbosity )
С R:
Код: Выделить всё
# ---- A propos du dataset
max_t
Подробнее здесь: [url]https://stackoverflow.com/questions/79189356/the-code-in-python-and-r-with-keras3-are-different-i-dont-understand[/url]
1731671480
Anonymous
Я пытаюсь преобразовать этот код, написанный в формате Python, в формат R, но результат отличается, и я не понимаю, почему? С Python: [code]# ---- About dataset # max_t = 1000 delta_t = 0.01 features_len = 2 sequence_len = 20 predict_len = 5 # ---- About training # scale = .2 # Percentage of dataset to be used (1=all) train_prop = .8 # Percentage for train (the rest being for the test) batch_size = 32 epochs = 5 fit_verbosity = 1 # 0 = silent, 1 = progress bar, 2 = one line per epoch def ladybug_init(s=122): if s>0 : random.seed(s) ladybug_init.params_x = [ random.gauss(0.,1.) for u in range(8)] ladybug_init.params_y = [ random.gauss(0.,1.) for u in range(8)] def ladybug_move(t): [ax1, ax2, ax3, ax4, kx1, kx2, kx3, kx4] = ladybug_init.params_x [ay1, ay2, ay3, ay4, ky1, ky2, ky3, ky4] = ladybug_init.params_y x = ax1*sin(t*(kx1+20)) + ax2*cos(t*(kx2+10)) + ax3*sin(t*(kx3+5)) + ax4*cos(t*(kx4+5)) y = ay1*cos(t*(ky1+20)) + ay2*sin(t*(ky2+10)) + ay3*cos(t*(ky3+5)) + ay4*sin(t*(ky4+5)) return x,y # ---- Get positions # ladybug_init(s=16) x,y = 0,0 positions=[] for t in np.arange(0., max_t, delta_t): x,y = ladybug_move(t) positions.append([x,y]) # ---- Build rescaled dataset # n = int( len(positions)*scale ) dataset = np.array(positions[:n]) k = int(len(dataset)*train_prop) x_train = dataset[:k] x_test = dataset[k:] # ---- Normalize # mean = x_train.mean() std = x_train.std() x_train = (x_train - mean) / std x_test = (x_test - mean) / std # ---- Create sequences and labels for train and test # xs_train, ys_train=[],[] all_i = np.random.permutation( len(x_train) - sequence_len - 1 ) for i in all_i: xs_train.append( x_train[ i : i+sequence_len ] ) ys_train.append( x_train[ i+sequence_len+1 ] ) xs_test, ys_test=[],[] for i in range( len(x_test) - sequence_len - 1): xs_test.append( x_test[ i : i+sequence_len ] ) ys_test.append( x_test[ i+sequence_len+1 ] ) # ---- Convert to numpy / float16 xs_train = np.array(xs_train, dtype='float16') ys_train = np.array(ys_train, dtype='float16') xs_test = np.array(xs_test, dtype='float16') ys_test = np.array(ys_test, dtype='float16') model = keras.models.Sequential() model.add( keras.layers.InputLayer(shape=(sequence_len, features_len)) ) model.add( keras.layers.GRU(200, return_sequences=False, activation='relu') ) model.add( keras.layers.Dense(features_len) ) model.summary() model.compile(optimizer='rmsprop', loss='mse', metrics = ['mae'] ) os.makedirs(f'{run_dir}/models', mode=0o750, exist_ok=True) save_dir = f'{run_dir}/models/best_model.keras' savemodel_callback = keras.callbacks.ModelCheckpoint( filepath=save_dir, monitor='val_mae', mode='max', save_best_only=True) history=model.fit(xs_train,ys_train, epochs = epochs, verbose = fit_verbosity, validation_data = (xs_test, ys_test), callbacks = [savemodel_callback]) s=random.randint(0,len(x_test)-sequence_len) sequence = x_test[s:s+sequence_len] sequence_true = x_test[s:s+sequence_len+1] sequence_pred = loaded_model.predict( np.array([sequence]), verbose=fit_verbosity ) [/code] С R: [code]# ---- A propos du dataset max_t Подробнее здесь: [url]https://stackoverflow.com/questions/79189356/the-code-in-python-and-r-with-keras3-are-different-i-dont-understand[/url]