вівторок, 8 серпня 2023 р.

Конвертація TeX-Файлу з Формулами в DOCX за допомогою Pandoc

Конвертація TeX-Файлу з Формулами в DOCX за допомогою Pandoc

TeX є потужним інструментом для створення складних документів, особливо коли йдеться про математичні формули. Але інколи може виникнути потреба конвертувати TeX-файл в формат DOCX. В цьому пості ми розглянемо, як це зробити за допомогою Pandoc.

Встановлення Pandoc

Спершу вам потрібно встановити Pandoc. Це можна зробити за допомогою наступної команди:

pip install pandoc

Конвертація TeX-Файлу в DOCX

За допомогою Pandoc ви можете конвертувати TeX-файл в DOCX за допомогою такої команди:

pandoc myfile.tex -o myfile.docx

де myfile.tex - це ім'я вашого TeX-файлу, а myfile.docx - ім'я вихідного DOCX-файлу.

Збереження Формул

Pandoc автоматично зберігає більшість формул при конвертації з TeX в DOCX. Проте, деякі специфічні формули можуть потребувати додаткового налаштування або редагування вручну.

Заключення

Конвертація TeX-файлу в DOCX може бути здійснена за допомогою Pandoc з лише кількома командами. Це забезпечує гнучкий спосіб перетворення ваших наукових і математичних документів в загальноприйнятий формат, який можна легко відкрити та редагувати в багатьох текстових редакторах.

Автоматизація Конвертації за допомогою Bat-Файлу

Якщо вам потрібно конвертувати багато TeX-файлів, ви можете автоматизувати цей процес за допомогою bat-файлу. Ось як це зробити:

  1. Створіть новий текстовий файл з розширенням .bat, наприклад, convert.bat.
  2. Відкрийте файл в текстовому редакторі та додайте наступний рядок:
  3. pandoc %1.tex -o %1.docx
  4. Збережіть і закрийте файл.
  5. Тепер ви можете перетягнути ваш TeX-файл на цей bat-файл або запустити його з командного рядка, передавши ім'я TeX-файлу без розширення як аргумент, наприклад:
  6. convert myfile

Цей bat-файл використовує Pandoc для конвертації вказаного TeX-файлу в DOCX. Ви можете легко конвертувати кілька файлів, перетягуючи їх на bat-файл або запускаючи його з командного рядка для кожного файлу окремо.

Об'єднання кількох docx файлів в один файл

Вступ

Об'єднання кількох DOCX-файлів в один файл може бути корисним у різних ситуаціях, особливо при створенні звітів, конспектів та інших документів. У цьому пості я поясню, як можна об'єднати кілька DOCX-файлів в один за допомогою мови програмування Python та бібліотеки python-docx.

Підготовка

Перш ніж почати, вам потрібно встановити бібліотеку python-docx. Ви можете зробити це за допомогою наступної команди:

pip install python-docx

Об'єднання DOCX-файлів

Тепер ми можемо написати код для об'єднання DOCX-файлів. Ось основні кроки:

  1. Імпортування необхідних бібліотек:
  2. from docx import Document
  3. Створення нового об'єкта документа:
  4. merged_document = Document()
  5. Об'єднання кожного файлу: Ітеруйте через кожен файл, який потрібно об'єднати, та додайте його вміст до об'єднаного документа.
  6. files = ['file1.docx', 'file2.docx', 'file3.docx']
    for file_name in files:
        sub_doc = Document(file_name)
        for element in sub_doc.element.body:
            merged_document.element.body.append(element)
  7. Збереження об'єднаного документа:
  8. merged_document.save('merged.docx')

За допомогою цього підходу можна легко об'єднати кілька DOCX-файлів в один. Це може бути корисно для автоматизації робочих процесів та збільшення продуктивності.

Об'єднання DOCX-файлів з Малюнками

Об'єднання DOCX-файлів з малюнками вимагає додаткового кроку, оскільки малюнки мають бути коректно впорядковані у новому документі. Ми можемо використовувати бібліотеку docxcompose для цього завдання.

Встановлення docxcompose

Спершу вам потрібно встановити бібліотеку docxcompose:

pip install docxcompose

Код для об'єднання DOCX-файлів з малюнками

Тепер ми можемо використовувати docxcompose для об'єднання файлів з малюнками. Ось приклад коду:

from docxcompose.composer import Composer
from docx import Document

merged_document = Document()
composer = Composer(merged_document)

files = ['file1.docx', 'file2.docx', 'file3.docx']
for file_name in files:
    sub_doc = Document(file_name)
    composer.append(sub_doc)

composer.save('merged_with_images.docx')

Цей код зчитує кожен файл зі списку файлів та об'єднує їх в один документ, зберігаючи всі малюнки.

Об'єднання DOCX-файлів з малюнками може бути трохи складнішим, але з правильними інструментами це все одно досить просто. За допомогою бібліотеки docxcompose ми можемо зберегти всі малюнки та інші елементи форматування при об'єднанні файлів.

СhatCPT4.5

середа, 2 серпня 2023 р.

Візуалізація фільтрів згорткових шарів

Згорткові нейронні мережі (CNN) використовуються для багатьох завдань машинного навчання, особливо для обробки зображень. Одним з ключових елементів CNN є згорткові шари, які використовують набори ваг (або фільтрів) для сканування вхідного зображення та виявлення різних характеристик, таких як краї, текстури та кольори.

Ми можемо візуалізувати ці фільтри, щоб отримати краще уявлення про те, як CNN "бачить" зображення. В цьому пості ми покажемо, як це зробити за допомогою TensorFlow і Keras.

Спочатку, давайте навчимо модель класифікації на наборі MNIST:

import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt

mnist = tf.keras.datasets.mnist.load_data()
(X_train_full, y_train_full), (X_test, y_test) = mnist
X_train_full = X_train_full / 255.
X_test = X_test / 255.
X_train, X_valid = X_train_full[:-5000], X_train_full[-5000:]
y_train, y_valid = y_train_full[:-5000], y_train_full[-5000:]

X_train = X_train[..., np.newaxis]
X_valid = X_valid[..., np.newaxis]
X_test = X_test[..., np.newaxis]

model= tf.keras.Sequential([
    tf.keras.layers.Conv2D(32, kernel_size=13, padding="same",
                           activation="relu", kernel_initializer="he_normal"),
    tf.keras.layers.Conv2D(64, kernel_size=9, padding="same",
                           activation="relu", kernel_initializer="he_normal"),
    tf.keras.layers.MaxPool2D(),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dropout(0.25),
    tf.keras.layers.Dense(128, activation="relu",
                          kernel_initializer="he_normal"),
    tf.keras.layers.Dropout(0.5),
    tf.keras.layers.Dense(10, activation="softmax")
])

model.compile(loss="sparse_categorical_crossentropy", optimizer="nadam",
              metrics=["accuracy"])

model.fit(X_train, y_train, epochs=4, validation_data=(X_valid, y_valid))
model.evaluate(X_test, y_test)

Після тренування моделі ми можемо отримати ваги першого згорткового шару:

filters, biases = model.layers[0].get_weights()

Це дає нам масив фільтрів, які можна візуалізувати за допомогою Matplotlib:

fig, ax = plt.subplots(nrows=4, ncols=8, figsize=(12, 6))
for i in range(4):
    for j in range(8):
        ax[i][j].imshow(filters[:, :, 0, i*8+j], cmap='cividis')
        ax[i][j].axis('off')
plt.show()

На виході отримаємо 32 візуалізованих фільтри, які показують, як кожен фільтр реагує на вхідні дані. Це може бути корисним інструментом для розуміння того, як CNN працює.

Для виводу фільтрів другого шару використаємо такий код:

filters, biases = model.layers[1].get_weights()
fig, ax = plt.subplots(nrows=8, ncols=8, figsize=(12, 12))
for i in range(8):
    for j in range(8):
        ax[i][j].imshow(filters[:, :, 0, i*8+j], cmap='cividis')
        ax[i][j].axis('off')
plt.show()
Розміри ядер було вибрано великими для кращої візуалізації.

понеділок, 31 липня 2023 р.

Зменшення розміру зображення в два рази за допомогою Keras

В даному пості ми розглянемо, як використовувати бібліотеку глибокого навчання Keras для зменшення розміру зображення в два рази. Це можна зробити за допомогою так званого "пулінгового" шару.

Що таке пулінговий шар?

Пулінговий шар - це шар, який часто використовується в згорткових нейронних мережах для зменшення просторового розміру (ширина і висота) вхідного об'єкта. Він працює, виконуючи певну операцію (наприклад, максимум або середнє значення) на пікселях в певному вікні на вхідному об'єкті і виводячи результат.

Створення пулінгового шару в Keras

Ми можемо створити пулінговий шар за максимумом в Keras за допомогою класу MaxPooling2D:
from keras.models import Sequential
from keras.layers import MaxPooling2D

# створення моделі з одним шаром MaxPooling2D, який зменшує розмір зображення в два рази
model = Sequential()
model.add(MaxPooling2D(pool_size=(2, 2), input_shape=(None, None, 3)))
Ця модель прийматиме зображення будь-якого розміру з 3 каналами кольору (RGB) і зменшить його в два рази. Використання моделі для зменшення зображення

Тепер, коли у нас є модель, ми можемо використовувати її для зменшення розміру зображення:

import cv2
import numpy as np
Lena = cv2.imread('Lena.jpg')
image=Lena/255.0
image = np.expand_dims(image, axis=0)
output = model.predict(image)
output_image = output[0, :, :, :3]
У цьому коді ми завантажуємо та нормалізуємо зображення 'Lena.jpg', а потім передаємо його в модель Keras для зменшення розміру в два рази. На виході ми отримуємо зображення, розмір якого зменшений в два рази за допомогою моделі, та витягуємо RGB канали цього зображення.

Рядок

np.expand_dims(image, axis=0)
додає нову вісь до масиву image на позиції 0. Наприклад, якщо вихідне зображення має форму (висота, ширина, канали), після додавання нової осві форма зображення змінюється до (1, висота, ширина, канали). Це робиться для того, щоб підготувати зображення до передачі в нейронну мережу, оскільки багато функцій Keras очікують вхідні дані у формі батчу (масиву зразків), навіть якщо цей батч містить лише один зразок. Також в моделях можна використати інші типи пулінгових шарів попередньо імпортувавши їх
 from keras.layers import AveragePooling2D
# Створення моделі
model = Sequential()
# Додавання шару AveragePooling2D
model.add(AveragePooling2D(pool_size=(2, 2), input_shape=(None, None, 3)))
У цьому прикладі, pool_size=(2, 2) означає, що пулінговий шар буде брати середнє значення кожного вікна розміром 2x2 пікселів в початковому зображенні.

Вхідне зображення повинно мати 3 канали кольору (RGB).

Це все можна було зробити і без створення моделі, просто застосувавши пулінговий шар як оператор до зображення

avg_pool_layer = AveragePooling2D(pool_size=(2, 2))
output = avg_pool_layer(image)
output_image = output[0, :, :, :].numpy()

Звичайно ніхто так зменшувати зображення не буде, мета цього посту продемострувати функціональні можливості Keras навіть для невластивих для нього задач.

неділя, 29 січня 2023 р.

Клас Counter

Клас Counter з модуля collections у Python є підкласом dict для підрахунку хешованих об’єктів. Це контейнер, який буде зберігати підрахунок кожного з елементів, присутніх у контейнері. Елементи в контейнері зберігаються як ключі словника, а їх кількість зберігається як значення словника. Клас Counter схожий на словник, але він має деякі додаткові функції, такі як можливість підраховувати елементи в ітерації та повертати найпоширеніші елементи в контейнері. Одним із основних випадків використання класу Counter є підрахунок елементів у списку, наприклад:
from collections import Counter

# create a list of elements
elements = ['apple', 'banana', 'apple', 'orange', 'banana', 'orange']

# create a counter object
counter = Counter(elements)

# Print the count of each element
print(counter)

Counter({'apple': 2, 'banana': 2, 'orange': 2})
Об’єкт counter підраховує кількість входжень кожного елемента та повертає об’єкт, подібний до словника, де ключі є елементами, а значення – підрахунками. Іншою корисною функцією Counter є метод most_common(), який повертає список із n найпоширеніших елементів і їх підрахунок від найпоширенішого до найменшого, наприклад:
# get the top two most common elements
print(counter.most_common(2))
[('apple', 2), ('banana', 2)]
Клас Counter також підтримує математичні операції, такі як додавання та віднімання лічильників, наприклад:
# create two counter objects
counter1 = Counter(['apple', 'banana', 'apple'])
counter2 = Counter(['orange', 'banana', 'orange'])

# add two counters
counter3 = counter1 + counter2

# subtract two counters
counter4 = counter1 - counter2