我正在用Keras编写Deep learning network,之前在Matlab中测试过。为了避免做所有的学习,我在Matlab中将最后一层的权重和偏差导出为.csv文件,并希望在我的网络中使用它们-所以我的网络只会根据给定的权重测试分数,而不是整个学习过程。在
代码:
import os
os.environ['KERAS_BACKEND'] = 'tensorflow'
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten, Input
from keras.layers import Convolution2D, MaxPooling2D
from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
#from keras import backend as K
from keras.preprocessing import image
print("\n")
print("\n")
trained_weights = []
trained_bias = []
trained_weights = np.loadtxt('Weights.csv', delimiter=';')
trained_bias = np.loadtxt('Bias.csv', delimiter=';')
network_weights = np.array([[trained_weights]])
network_bias = np.array([[trained_bias]])
network_outputs = np.array([['a','c','d','e','f','g','h']])
# Load test image
img = load_img('note_a.png')
note = image.img_to_array(img)
#note = np.expand_dims(note, axis=0)
note = np.reshape(note, [1, 50, 30, 3])
# Model architecture
model = Sequential()
# Layer 1
model.add(Convolution2D(12, (6, 6), batch_size=1, input_shape=(50, 30, 3), padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=2))
# Layer 2
model.add(Convolution2D(24, (6, 6), padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=2))
# Layer 3
model.add(Convolution2D(48, (6, 6), activation='relu'))
model.add(Flatten())
layer2=Dense(7, weights=[network_weights, network_bias], activation='softmax')
model.add(layer2)
model.summary()
print("\n")
print("\n")
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics = ['accuracy'])
#model.fit((note,network_outputs), batch_size=32, nb_epoch=10, verbose=1)
#score = model.evaluate(note, network_outputs)
我想用
^{pr2}$但它似乎只给我的第一层网络分配了一个权重,所以我只给最后一层分配了权重。结果是以下错误:
ValueError: Layer weight shape (672, 7) not compatible with provided weight shape (1, 1, 672, 7)
这让我很困惑。如何通过weights=[网络权重,网络偏差]得到4个维度?是不是因为网络权重有维度[1672],而网络权重偏差=[1,7],这使得[1,1672,7]?在
如何正确调整权重参数?在
np.array([[trained_weights]])
用两个空维度包围的数据创建一个数组,因此最终的形状是(1,1,x,y)。你的训练偏见也是一样。应用[network_weights, network_bias]
会再次用一个维度包围2个数组,这显然不匹配。在我认为你只需要用一些东西来清洁所有不必要的环境,比如:
相关问题 更多 >
编程相关推荐