从csv导入权重文件:层权重形状(672,7)与提供的重量形状(1,1,672,7)不兼容

2024-04-20 01:39:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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]?在

如何正确调整权重参数?在


Tags: fromimport网络addimgmodelnpnetwork
1条回答
网友
1楼 · 发布于 2024-04-20 01:39:50

np.array([[trained_weights]])用两个空维度包围的数据创建一个数组,因此最终的形状是(1,1,x,y)。你的训练偏见也是一样。应用[network_weights, network_bias]会再次用一个维度包围2个数组,这显然不匹配。在

我认为你只需要用一些东西来清洁所有不必要的环境,比如:

weights=[trained_weights, trained_bias]

相关问题 更多 >