gpt4 book ai didi

keras - tensorflow.keras 拟合期间 - 无效的参数 reshape 输入是具有 983040 个值的张量,但请求的形状具有 1966080

转载 作者:行者123 更新时间:2023-12-03 19:08:21 26 4
gpt4 key购买 nike

当我安装 tensorflow.keras.Model 时,我该如何解决这个错误, 喜欢:

history_model_2 = model.fit(train_data.next_batch(),
validation_data=validation_data.next_batch(),
epochs=32)
这是我得到的错误:
InvalidArgumentError: 2 root error(s) found.
(0) Invalid argument: Input to reshape is a tensor with 983040 values, but the requested shape has 1966080
[[node model_2/reshape/Reshape (defined at <ipython-input-82-15c7d8d22e71>:10) ]]
[[model_2/ctc/Cast_3/_90]]
(1) Invalid argument: Input to reshape is a tensor with 983040 values, but the requested shape has 1966080
[[node model_2/reshape/Reshape (defined at <ipython-input-82-15c7d8d22e71>:10) ]]
0 successful operations.
0 derived errors ignored. [Op:__inference_train_function_33412]

Function call stack:
train_function -> train_function
{{ 在我的 model.fit() , train_data.next_batch()是一个生成器,为 x 生成数据和 y参数(我从 model.fit_generator is being deprecated 开始使用它,这个生成器和几乎完整的代码部分灵感来自 this example from keras ocr examples on GitHub ,我也从中使用了如下所示的 ctc 损失函数。)}}
这是我的完整模型:
from tensorflow.keras import layers
from tensorflow.keras import Model
from tensorflow.keras import backend as tf_keras_backend

def ctc_lambda_func(args):
y_pred, labels, input_length, label_length = args
# the 2 is critical here, since the first couple outputs of the RNN tend to be garbage:
y_pred = y_pred[:, 2:, :]
return tf_keras_backend.ctc_batch_cost(labels, y_pred, input_length, label_length)

# Make Network
input_data = layers.Input(name='the_input', shape=(128, 64, 1), dtype='float32') # (None, 128, 64, 1)

# Convolution layer (VGG)
inner = layers.Conv2D(64, (3, 3), padding='same', name='conv1', kernel_initializer='he_normal', activation='relu')(input_data) # (None, 128, 64, 64)
inner = layers.BatchNormalization()(inner)
inner = layers.Activation('relu')(inner)
inner = layers.MaxPooling2D(pool_size=(2, 2), name='max1')(inner) # (None,64, 32, 64)

inner = layers.Conv2D(128, (3, 3), padding='same', name='conv2', kernel_initializer='he_normal', activation='relu')(inner) # (None, 64, 32, 128)
inner = layers.BatchNormalization()(inner)
inner = layers.Activation('relu')(inner)
inner = layers.MaxPooling2D(pool_size=(2, 2), name='max2')(inner) # (None, 32, 16, 128)

inner = layers.Conv2D(256, (3, 3), padding='same', name='conv3', kernel_initializer='he_normal', activation='relu')(inner) # (None, 32, 16, 256)
inner = layers.BatchNormalization()(inner)
inner = layers.Activation('relu')(inner)
inner = layers.Conv2D(256, (3, 3), padding='same', name='conv4', kernel_initializer='he_normal', activation='relu')(inner) # (None, 32, 16, 256)
inner = layers.BatchNormalization()(inner)
inner = layers.Activation('relu')(inner)
inner = layers.MaxPooling2D(pool_size=(1, 2), name='max3')(inner) # (None, 32, 8, 256)

inner = layers.Conv2D(512, (3, 3), padding='same', name='conv5', kernel_initializer='he_normal', activation='relu')(inner) # (None, 32, 8, 512)
inner = layers.BatchNormalization()(inner)
inner = layers.Activation('relu')(inner)
inner = layers.Conv2D(512, (3, 3), padding='same', name='conv6', activation='relu')(inner) # (None, 32, 8, 512)
inner = layers.BatchNormalization()(inner)
inner = layers.Activation('relu')(inner)
inner = layers.MaxPooling2D(pool_size=(1, 2), name='max4')(inner) # (None, 32, 4, 512)

inner = layers.Conv2D(512, (2, 2), padding='same', kernel_initializer='he_normal', name='con7', activation='relu')(inner) # (None, 32, 4, 512)
before_reshape = layers.BatchNormalization()(inner)
inner = layers.Activation('relu')(inner)

# CNN to RNN
reshape_op = layers.Reshape(target_shape=((32, 2048)), name='reshape')(before_reshape) # (None, 32, 2048)
dense_after_reshape = layers.Dense(64, activation='relu', kernel_initializer='he_normal', name='dense1')(reshape_op) # (None, 32, 64)

# RNN layer
gru_1 = layers.GRU(256, return_sequences=True, kernel_initializer='he_normal', name='gru1')(dense_after_reshape) # (None, 32, 512)
gru_1b = layers.GRU(256, return_sequences=True, go_backwards=True, kernel_initializer='he_normal', name='gru1_b')(dense_after_reshape)
reversed_gru_1b = layers.Lambda(lambda inputTensor: tf_keras_backend.reverse(inputTensor, axes=1)) (gru_1b)

gru1_merged = layers.add([gru_1, reversed_gru_1b]) # (None, 32, 512)
gru1_merged = layers.BatchNormalization()(gru1_merged)

gru_2 = layers.GRU(256, return_sequences=True, kernel_initializer='he_normal', name='gru2')(gru1_merged)
gru_2b = layers.GRU(256, return_sequences=True, go_backwards=True, kernel_initializer='he_normal', name='gru2_b')(gru1_merged)
reversed_gru_2b= layers.Lambda(lambda inputTensor: tf_keras_backend.reverse(inputTensor, axes=1)) (gru_2b)

gru2_merged = layers.concatenate([gru_2, reversed_gru_2b]) # (None, 32, 1024)
gru2_merged = layers.BatchNormalization()(gru2_merged)

# transforms RNN output to character activations:
y_pred = layers.Dense(num_classes, kernel_initializer='he_normal',name='dense2', activation='softmax')(gru2_merged) #(None, 32, 80)
y_pred = layers.Activation('softmax', name='softmax')(inner)

labels = layers.Input(name='the_labels', shape=[16], dtype='float32')
input_length = layers.Input(name='input_length', shape=[1], dtype='int64')
label_length = layers.Input(name='label_length', shape=[1], dtype='int64')

# loss function
loss_out = layers.Lambda(ctc_lambda_func, output_shape=(1,), name='ctc')(
[y_pred, labels, input_length, label_length]
)

model = Model(inputs=[input_data, labels, input_length, label_length], outputs=loss_out)
编译它:
model.compile(loss={'ctc': lambda y_true, y_pred: y_pred}, optimizer = 'adam')
我还尝试通过多种方式调试来确保尺寸正确,但无济于事。
我该如何解决?或者我做错了什么导致了这个错误?
编辑 1:
这是模型摘要:
我的批量大小是 64。
model summary as image

最佳答案

我准备用于预处理图像的生成器出现错误。它产生了 64,64 而不是 128,64 的图像。我很遗憾没有检查它。

关于keras - tensorflow.keras 拟合期间 - 无效的参数 reshape 输入是具有 983040 个值的张量,但请求的形状具有 1966080,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62995465/

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