gpt4 book ai didi

python - 从 csv 文件 :Layer weight shape (672, 导入权重 7) 与提供的权重形状不兼容 (1, 1, 672, 7)

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:39 26 4
gpt4 key购买 nike

我正在 Keras 中编写深度学习网络,之前在 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)

我正在尝试使用

model.set_weights([network_outputs])

但它似乎只为我的第一层网络分配了权重,所以我只是为最后一层分配了权重。结果是以下错误:

ValueError: Layer weight shape (672, 7) not compatible with provided weight shape (1, 1, 672, 7)

这让我很困惑。如何通过 weights=[network_weights, network_bias] 我得到 4 个维度?是不是因为 network_weights 的维度是 [1,672],而 network_bias=[1,7],所以是 [1,1,672,7]?

以及如何正确调整此权重参数的大小?

最佳答案

np.array([[trained_weights]]) 用 2 个空维度包围的数据创建一个数组,因此您的最终形状是 (1, 1, x, y)。与您的 trained_bias 相同。应用 [network_weights, network_bias] 再次用一个维度包围你的 2 个数组,这显然不匹配。

我认为你只需要使用类似的东西清理所有不必要的环境:

weights=[trained_weights, trained_bias]

关于python - 从 csv 文件 :Layer weight shape (672, 导入权重 7) 与提供的权重形状不兼容 (1, 1, 672, 7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51543011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com