Ошибка значения: не удалось преобразовать строку в число с плавающей точкой: '<' при создании CNN-LSTM с встраиванием символов - PullRequest
0 голосов
/ 14 октября 2019

Я пытался обучить модель глубокого обучения изучению SVG-кода изображения, взглянув на изображение .png (64x64x3), соответствующее этому SVG-коду. Я пытался сделать это, используя модель Conv2D (для png) и RNN (для последовательностей SVG). При обучении модели выдает следующую ошибку: ValueError: could not convert string to float: '<'.

Я не очень понимаю, почему моя модель хочет превратить эти строковые символы в плавающие.

Возможные символы в SVG: ['<', '?', 'x', 'm', 'l', ' ', 'v', 'e', 'r', 's', 'i', 'o', 'n', '=', '"', '1', '.', '0', 'c', 'd', 'g', 'u', 't', 'f', '-', '8', '>', '\n', 'b', 'a', 'P', 'h', '6', '4', 'w', 'p', ':', '/', '3', '2', 'k', '9', 'y', '5', 'q']

Самый длинный код SVG имеет длину 821 символ. У меня есть 48000 экземпляров.

# Partitioning training and validation data

print('Loading data...')
x_train, x_test = train_test_split(X, test_size=1/10, random_state=999)
y_train, y_test = train_test_split(Y, test_size=1/10, random_state=999)

# Padding

print('Pad sequences')
y_train = sequence.pad_sequences(y_train, dtype=str, maxlen=821, value="0")
y_test = sequence.pad_sequences(y_test, dtype=str, maxlen=821, value="0")

# Partial Image model

inputA = Input(shape=(64, 64, 3))
A = Conv2D (16, kernel_size = (3,3), strides=(1, 1), padding='same')(inputA)
A = MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid')(A)
A = Conv2D (8, kernel_size = (3,3), strides=(2, 2), padding='same')(A)
A = MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid')(A)

A = Flatten () (A)

A = Dropout(0.5)(A)
A = Dense(256, activation='relu')(A)

# Partial SVG code model
inputB = Input(shape=(820,))
B = Embedding(45, 16, mask_zero=True)(inputB)
B = Dropout(0.5)(B)
B = LSTM(256, return_sequences = False)(B)


# Decoder model
decoder1 = add([A, B])
decoder2 = Dense(256, activation='relu')(decoder1)
outputs = Dense(820, activation='softmax')(decoder2)

# Merge two input models
model = Model(inputs=[inputA, inputB], outputs=outputs)
model.compile (loss='categorical_crossentropy', optimizer='rmsprop', metrics = ['accuracy'])



print('Train...')
history = model.fit([x_train, y_train[:, :-1]], y_train[:, 1:],
                    batch_size=128,
                    epochs=20,
                    verbose=2)

Любой совет, как заставить мой код работать, был бы великолепен! Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...