Numpy 特定形状的Keras初始值设定项
我制作了一个小型keras模型,并使用以下代码获得模型的权重:Numpy 特定形状的Keras初始值设定项,numpy,keras,keras-2,Numpy,Keras,Keras 2,我制作了一个小型keras模型,并使用以下代码获得模型的权重: from keras.models import Sequential from keras.layers import Dense, Flatten,Conv2D, MaxPooling2D input_shape = (28, 28, 1) model = Sequential() model.add(Conv2D(1, kernel_size=(2, 2), activation='relu'
from keras.models import Sequential
from keras.layers import Dense, Flatten,Conv2D, MaxPooling2D
input_shape = (28, 28, 1)
model = Sequential()
model.add(Conv2D(1, kernel_size=(2, 2),
activation='relu',
input_shape=input_shape,trainable=False))
model.add(MaxPooling2D(pool_size=(16,16)))
model.add(Flatten())
model.add(Dense(3, activation='softmax',trainable=False))
a=model.get_weights()
from keras.initializers import glorot_uniform
W1 = glorot_uniform((a,))
现在,我想使用keras初始值设定项将权重初始化为a的相同形状,我使用以下代码:
from keras.models import Sequential
from keras.layers import Dense, Flatten,Conv2D, MaxPooling2D
input_shape = (28, 28, 1)
model = Sequential()
model.add(Conv2D(1, kernel_size=(2, 2),
activation='relu',
input_shape=input_shape,trainable=False))
model.add(MaxPooling2D(pool_size=(16,16)))
model.add(Flatten())
model.add(Dense(3, activation='softmax',trainable=False))
a=model.get_weights()
from keras.initializers import glorot_uniform
W1 = glorot_uniform((a,))
我的方法正确吗?如果它是错误的,请向我建议解决方案,如果它是正确的,那么为什么我不能看到重量,它显示:
<keras.initializers.VarianceScaling at 0x7f65746ba128>
关于
获取权重()
:
方法model.get_weights()
将返回numpy数组的列表。因此,您必须注意创建一个具有相同数量数组、相同顺序和相同形状的列表
在这个模型中,列表中似乎有4个数组,卷积核和偏差加上密集核和偏差。每个都有不同的形状
关于初始值设定者:
初始值设定项是将形状
作为输入并返回张量
的函数
您会看到VarianceScaling
,因为它可能是函数的名称。应使用形状调用函数以获得结果:
weights = [glorot_uniform()(npArray.shape) for npArray in a]
它们将是keras张量,而不是numpy数组。您应该K.eval(arr)
将它们作为numpy数组
如果使用model.set_weights()
,则使用numpy数组传递列表(与get_weights()
中的数字相同,形状相同)
初始值设定项的标准用法:
但实际上,初始值设定项用于直接创建层,如果不想指定种子和其他初始值设定项参数,可以只使用字符串:
from keras.models import Sequential
from keras.layers import Dense, Flatten,Conv2D, MaxPooling2D
input_shape = (28, 28, 1)
model = Sequential()
model.add(Conv2D(1, kernel_size=(2, 2),
activation='relu',
input_shape=input_shape,
trainable=False,
kernel_initializer='glorot_uniform', #example with string
bias_initializer='zeros'))
model.add(MaxPooling2D(pool_size=(16,16)))
model.add(Flatten())
model.add(Dense(3,
activation='softmax',
trainable=False,
kernel_initializer=glorot_uniform(seed=None), #example creating a function
bias_initializer='zeros'))
阅读更多关于这里的信息 关于
获取权重()
:
方法model.get_weights()
将返回numpy数组的列表。因此,您必须注意创建一个具有相同数量数组、相同顺序和相同形状的列表
在这个模型中,列表中似乎有4个数组,卷积核和偏差加上密集核和偏差。每个都有不同的形状
关于初始值设定者:
初始值设定项是将形状
作为输入并返回张量
的函数
您会看到VarianceScaling
,因为它可能是函数的名称。应使用形状调用函数以获得结果:
weights = [glorot_uniform()(npArray.shape) for npArray in a]
它们将是keras张量,而不是numpy数组。您应该K.eval(arr)
将它们作为numpy数组
如果使用model.set_weights()
,则使用numpy数组传递列表(与get_weights()
中的数字相同,形状相同)
初始值设定项的标准用法:
但实际上,初始值设定项用于直接创建层,如果不想指定种子和其他初始值设定项参数,可以只使用字符串:
from keras.models import Sequential
from keras.layers import Dense, Flatten,Conv2D, MaxPooling2D
input_shape = (28, 28, 1)
model = Sequential()
model.add(Conv2D(1, kernel_size=(2, 2),
activation='relu',
input_shape=input_shape,
trainable=False,
kernel_initializer='glorot_uniform', #example with string
bias_initializer='zeros'))
model.add(MaxPooling2D(pool_size=(16,16)))
model.add(Flatten())
model.add(Dense(3,
activation='softmax',
trainable=False,
kernel_initializer=glorot_uniform(seed=None), #example creating a function
bias_initializer='zeros'))
阅读更多关于这里的信息
weights=[glorot_uniform()(npArray.shape)用于a中的npArray]
这行代码对我有很大帮助@Daniel。thnnParray和nparraynparray
之间的区别只是一个变量名。我使用这个名称只是为了记住这个变量是一个numpy数组。从'weights=[glorot_uniform()(npArray.shape)for a中的npArray]`我想将glorot_uniform替换为numpy数组,如下代码:unif=glorot_uniform()X=K.eval(unif((1,11)))Z=[X()(npArray.shape)for a中的npArray]
但获取错误TypeError:“numpy.ndarray”对象不可调用
若要重塑numpy数组,请执行X.reformate(someShape)
--在该列表中,您可以尝试:权重=[X.reformate(W.shape)表示X,W表示zip(arraysFromOtherProgram,a)]
权重=[glorot\u uniform()(npArray.shape)表示a中的npArray]这句话对我有很大帮助@Daniel。thnnParray和nparraynparray
之间的区别只是一个变量名。我使用这个名称只是为了记住这个变量是一个numpy数组。从'weights=[glorot_uniform()(npArray.shape)for a中的npArray]`我想将glorot_uniform替换为numpy数组,如下代码:unif=glorot_uniform()X=K.eval(unif((1,11)))Z=[X()(npArray.shape)for a中的npArray]
但获取错误TypeError:“numpy.ndarray”对象不可调用
若要重塑numpy数组,请执行X.restrape(someShape)
--在该列表中,您可以尝试:权重=[X.restrape(W.shape)for X,W In-zip(arraysFromOtherProgram,a)]