Quelle est la différence entre model_weights et optimizer_weights dans keras. après avoir exécuté le code suivant model.summary
montre le total des 9 paramètres, ce qui montre dans le poids du modèle dans 1.h5
fichier. Mais optimizer_weight montre au total 18 paramètres. Je n'ai utilisé qu'une seule époque. Code suit:Différence entre model_weights et optimizer_weights dans keras
from __future__ import print_function
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K
import numpy as np
from sklearn.model_selection import train_test_split
import tensorflow as tf
batch_size = 128
num_classes = 2
epochs = 1
# input image dimensions
img_rows, img_cols = 28, 28
(x_train, y_train), (x_test, y_test) = mnist.load_data()
#Redistributing data for only two classes
x1_train=x_train[y_train==0]; y1_train=y_train[y_train==0]
x1_test=x_test[y_test==0];y1_test=y_test[y_test==0]
x2_train=x_train[y_train==1];y2_train=y_train[y_train==1]
x2_test=x_test[y_test==1];y2_test=y_test[y_test==1]
X=np.concatenate((x1_train,x2_train,x1_test,x2_test),axis=0)
Y=np.concatenate((y1_train,y2_train,y1_test,y2_test),axis=0)
# the data, shuffled and split between train and test sets
x_train, x_test, y_train, y_test = train_test_split(X,Y)
if K.image_data_format() == 'channels_first':
x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
input_shape = (1, img_rows, img_cols)
else:
x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')
# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
model = Sequential()
model.add(Conv2D(1, kernel_size=(2, 2),
activation='relu',
input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(16,16)))
model.add(Flatten())
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy'])
model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
verbose=1,
validation_data=(x_test, y_test))
model.summary()
model.save('1.h5')
Mais pourquoi model_weights sont 9 et optimizer_weights sont au nombre de 18 dans l'exemple ci-dessus. (J'utilise epoch = 1). Et supposons que je n'utilise pas d'optimiseurs basés sur des dégradés (en utilisant un essaim basé) alors quel poids dois-je mettre à jour, model_weights ou optimizer_weights? – Hitesh
Je ne sais pas comment fonctionnent les optimiseurs d'essaims ... Mais je pense qu'il faut prendre soin de ses propres poids ... Vous pouvez essayer d'augmenter votre modèle et de voir ce qu'il advient des poids de l'optimiseur. –
Je comprends. La seule confusion est, pourquoi pas de paramètres pour models_weights et optimizer_weight sont différents (pour l'exemple ci-dessus 9 et 18, j'ai obtenu de model.save) – Hitesh