Compare commits
2 Commits
orlov_arte
...
podkorytov
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
81cc2563d4 | ||
| a8c58683dd |
118
kutygin_andre_lab_3/README.md
Normal file
118
kutygin_andre_lab_3/README.md
Normal file
@@ -0,0 +1,118 @@
|
||||
**Задание**
|
||||
***
|
||||
Решите с помощью библиотечной реализации дерева решений задачу из лабораторной работы «Веб-сервис «Дерево решений» по предмету «Методы искусственного интеллекта»на 99% ваших данных. Проверьте работу модели на оставшемся проценте, сделайте вывод
|
||||
|
||||
**Как запустить лабораторную**
|
||||
***
|
||||
Запустить файл main.py
|
||||
|
||||
**Используемые технологии**
|
||||
***
|
||||
Библиотеки pandas, scikit-learn, matplotlib, их компоненты
|
||||
|
||||
**Описание лабораторной (программы)**
|
||||
***
|
||||
В данном коде мы создаем и обучаем модель дерева решений для прогнозирования инцидентов с НЛО на основе набора данных.
|
||||
|
||||
1. В первой строке кода мы загружаем данные из CSV-файла 'ufo_data_nuforc.csv' с помощью функции pd.read_csv(). Эти данные содержат информацию о различных инцидентах с НЛО.
|
||||
2. Далее мы выбираем набор признаков, в данном случае, эти признаки - населенность и время, которые будут использоваться для обучения модели, и сохраняем их в переменную features.
|
||||
3. Затем преобразуем категориальные признаки в числовой вид при помощи функции pd.get_dummies(). Это необходимо, так как модель дерева решений работает только с числовыми данными.
|
||||
4. После этого мы разделяем данные на обучающую и тестовую выборки с помощью функции train_test_split(). Обучающая выборка будет использоваться для обучения модели, а тестовая - для проверки ее точности.
|
||||
5. Создаем модель дерева решений с помощью класса DecisionTreeClassifier() из библиотеки sklearn.tree.
|
||||
6. Обучаем модель на обучающей выборке с помощью метода fit(). В процессе обучения модель настраивает параметры дерева решений, чтобы лучше предсказывать целевой признак.
|
||||
7. После обучения модели, мы производим прогнозы на тестовых данных с помощью метода predict().
|
||||
8. Оцениваем точность модели на тестовой выборке с помощью метода accuracy_score() из библиотеки sklearn.metrics. Этот метод сравнивает фактические значения целевого признака с предсказанными и возвращает точность модели.
|
||||
9. Наконец, выводим точность модели на тестовой выборке, чтобы оценить, насколько хорошо модель предсказывает инциденты с НЛО.
|
||||
10. Также, код визуализирует данные в виде графика с помощью библиотеки matplotlib.pyplot, отображая фактические значения целевого признака и предсказания модели. Это помогает наглядно оценить, насколько близки предсказания модели к реальным значениям.
|
||||
**Результат**
|
||||
***
|
||||
Точность модели на тестовой выборке: 0.1377245508982036
|
||||
Прогнозы по оставшемуся проценту данных: 'cylinder' 'circle' 'sphere' 'disk' 'disk' 'fireball' 'disk' 'oval'
|
||||
'circle' 'disk' 'disk' 'other' 'light' 'light' 'oval' 'fireball' 'light'
|
||||
'rectangle' 'chevron' 'unknown' 'sphere' 'oval' 'light' 'circle'
|
||||
'unknown' 'unknown' 'disk' 'triangle' 'triangle' 'unknown' 'formation'
|
||||
'unknown' 'cigar' 'unknown' 'light' 'other' 'rectangle' 'light' 'other'
|
||||
'light' 'cylinder' 'delta' 'sphere' 'other' 'changing' 'fireball'
|
||||
'cylinder' 'cigar' 'circle' 'triangle' 'light' 'fireball' 'fireball'
|
||||
'sphere' 'circle' 'light' 'chevron' 'oval' 'oval' 'light' 'unknown'
|
||||
'triangle' 'other' 'rectangle' 'triangle' 'triangle' 'flash' 'unknown'
|
||||
'sphere' 'unknown' 'other' 'circle' 'oval' 'light' 'oval' 'formation'
|
||||
'sphere' 'triangle' 'changing' 'sphere' 'oval' 'unknown' 'circle'
|
||||
'circle' 'flash' 'light' 'light' 'sphere' 'other' 'other' 'egg' 'unknown'
|
||||
'other' 'light' 'light' 'disk' 'diamond' 'oval' 'unknown' 'light'
|
||||
'triangle' 'other' 'light' 'disk' 'unknown' 'light' 'changing' 'sphere'
|
||||
'triangle' 'circle' 'flash' 'sphere' 'light' 'unknown' 'oval' 'formation'
|
||||
'light' 'circle' 'unknown' 'other' 'triangle' 'other' 'light' 'disk'
|
||||
'formation' 'oval' 'triangle' 'triangle' 'light' 'formation' 'oval'
|
||||
'light' 'light' 'oval' 'disk' 'sphere' 'egg' 'unknown' 'unknown'
|
||||
'unknown' 'light' 'disk' 'changing' 'light' 'light' 'circle' 'circle'
|
||||
'formation' 'light' 'light' 'cigar' 'light' 'triangle' 'oval' 'fireball'
|
||||
'cylinder' 'other' 'circle' 'egg' 'changing' 'triangle' 'circle' 'other'
|
||||
'oval' 'disk' 'light' 'flash' 'fireball' 'circle' 'circle' 'circle'
|
||||
'circle' 'light' 'disk' 'fireball' 'other' 'sphere' 'light' 'changing'
|
||||
'cigar' 'light' 'cylinder' 'rectangle' 'chevron' 'light' 'light' 'light'
|
||||
'light' 'circle' 'circle' 'light' 'light' 'circle' 'sphere' 'triangle'
|
||||
'light' 'egg' 'circle' 'fireball' 'sphere' 'sphere' 'triangle' 'light'
|
||||
'other' 'cigar' 'sphere' 'sphere' 'fireball' 'light' 'light' 'disk'
|
||||
'oval' 'oval' 'other' 'cigar' 'triangle' 'light' 'light' 'light' 'disk'
|
||||
'light' 'light' 'light' 'light' 'other' 'light' 'teardrop' 'triangle'
|
||||
'teardrop' 'fireball' 'sphere' 'cylinder' 'fireball' 'circle' 'egg'
|
||||
'sphere' 'disk' 'chevron' 'triangle' 'light' 'other' 'light' 'circle'
|
||||
'rectangle' 'fireball' 'formation' 'light' 'light' 'circle' 'light'
|
||||
'light' 'formation' 'light' 'triangle' 'light' 'oval' 'light' 'unknown'
|
||||
'fireball' 'diamond' 'light' 'circle' 'light' 'triangle' 'oval' 'oval'
|
||||
'cylinder' 'circle' 'light' 'disk' 'light' 'sphere' 'circle' 'light'
|
||||
'triangle' 'light' 'fireball' 'triangle' 'light' 'flash' 'triangle' 'egg'
|
||||
'disk' 'oval' 'circle' 'flash' 'light' 'oval' 'sphere' 'light' 'triangle'
|
||||
'other' 'chevron' 'other' 'circle' 'unknown' 'unknown' 'sphere' 'light'
|
||||
'cigar' 'light' 'fireball' 'circle' 'diamond' 'fireball' 'triangle'
|
||||
'diamond' 'sphere' 'circle' 'chevron' 'cylinder' 'light' 'circle'
|
||||
'fireball' 'unknown' 'light' 'circle' 'fireball' 'light' 'fireball'
|
||||
'fireball' 'fireball' 'light' 'sphere' 'light' 'sphere' 'sphere'
|
||||
'formation' 'light' 'fireball' 'fireball' 'disk' 'disk' 'circle'
|
||||
'rectangle' 'unknown' 'disk' 'unknown' 'disk' 'triangle' 'other' 'sphere'
|
||||
'diamond' 'light' 'light' 'unknown' 'sphere' 'circle' 'disk' 'circle'
|
||||
'oval' 'changing' 'other' 'other' 'disk' 'unknown' 'unknown' 'disk'
|
||||
'rectangle' 'disk' 'light' 'oval' 'unknown' 'sphere' 'light' 'changing'
|
||||
'disk' 'disk' 'other' 'other' 'disk' 'cylinder' 'disk' 'rectangle'
|
||||
'light' 'disk' 'disk' 'light' 'fireball' 'formation' 'cigar' 'oval'
|
||||
'fireball' 'unknown' 'disk' 'light' 'light' 'triangle' 'triangle' 'light'
|
||||
'sphere' 'triangle' 'sphere' 'circle' 'light' 'oval' 'oval' 'circle'
|
||||
'oval' 'rectangle' 'disk' 'oval' 'light' 'light' 'other' 'cigar'
|
||||
'triangle' 'disk' 'cigar' 'other' 'triangle' 'egg' 'unknown' 'triangle'
|
||||
'light' 'triangle' 'disk' 'changing' 'triangle' 'disk' 'disk' 'rectangle'
|
||||
'other' 'triangle' 'triangle' 'formation' 'triangle' 'egg' 'sphere'
|
||||
'fireball' 'triangle' 'rectangle' 'light' 'triangle' 'triangle' 'other'
|
||||
'light' 'light' 'disk' 'fireball' 'light' 'disk' 'oval' 'triangle'
|
||||
'other' 'fireball' 'light' 'light' 'triangle' 'unknown' 'cigar' 'light'
|
||||
'unknown' 'chevron' 'formation' 'disk' 'cigar' 'light' 'sphere' 'cigar'
|
||||
'unknown' 'triangle' 'other' 'light' 'light' 'triangle' 'diamond' 'light'
|
||||
'triangle' 'oval' 'changing' 'light' 'flash' 'circle' 'oval' 'other'
|
||||
'sphere' 'circle' 'triangle' 'unknown' 'teardrop' 'unknown' 'fireball'
|
||||
'light' 'light' 'cigar' 'cigar' 'light' 'fireball' 'other' 'egg' 'light'
|
||||
'other' 'unknown' 'unknown' 'changing' 'circle' 'light' 'other' 'unknown'
|
||||
'unknown' 'light' 'other' 'light' 'unknown' 'cylinder' 'triangle'
|
||||
'circle' 'light' 'circle' 'circle' 'circle' 'light' 'light' 'changing'
|
||||
'changing' 'circle' 'circle' 'triangle' 'triangle' 'light' 'light'
|
||||
'light' 'light' 'other' 'changing' 'triangle' 'cylinder' 'light'
|
||||
'unknown' 'circle' 'disk' 'sphere' 'oval' 'formation' 'teardrop'
|
||||
'triangle' 'chevron' 'light' 'unknown' 'unknown' 'other' 'egg' 'circle'
|
||||
'oval' 'cigar' 'unknown' 'chevron' 'oval' 'cigar' 'fireball' 'circle'
|
||||
'unknown' 'light' 'sphere' 'fireball' 'changing' 'light' 'circle'
|
||||
'unknown' 'fireball' 'light' 'sphere' 'light' 'formation' 'circle'
|
||||
'fireball' 'formation' 'formation' 'formation' 'light' 'other' 'light'
|
||||
'light' 'circle' 'diamond' 'oval' 'circle' 'oval' 'triangle' 'light'
|
||||
'disk' 'light' 'other' 'triangle' 'triangle' 'cylinder' 'disk' 'cylinder'
|
||||
'light' 'oval' 'cigar' 'circle' 'disk' 'light' 'unknown' 'circle' 'other'
|
||||
'light' 'light' 'light' 'unknown' 'triangle' 'other' 'disk' 'cylinder'
|
||||
'triangle' 'oval' 'disk' 'light' 'triangle' 'circle' 'light' 'other'
|
||||
'light' 'other' 'circle' 'disk' 'other' 'triangle' 'oval' 'unknown'
|
||||
'light' 'triangle' 'unknown' 'circle' 'unknown' 'light' 'fireball'
|
||||
'fireball' 'rectangle' 'light' 'formation' 'unknown' 'light' 'light'
|
||||
'formation' 'fireball' 'light' 'light' 'other' 'unknown' 'light'
|
||||
'triangle' 'fireball' 'triangle' 'triangle' 'flash' 'circle' 'triangle'
|
||||
'disk' 'light' 'unknown' 'light' 'light' 'fireball' 'circle' 'unknown'
|
||||
'unknown' 'circle' 'disk' 'chevron' 'disk' 'disk' 'triangle' 'light'
|
||||
'light' 'disk'
|
||||
|
||||
***Вывод:*** Наша модель дерева решений показала низкую точность предсказаний (Точность модели на тестовой выборке: 0.1377245508982036), что означает, что она не очень хорошо предсказывает форму НЛО на основе выбранных признаков (население и время). Из-за чего можно сделать вывод, что возможно, эти признаки недостаточно информативны или недостаточно связаны с формой НЛО.
|
||||
39
kutygin_andre_lab_3/main.py
Normal file
39
kutygin_andre_lab_3/main.py
Normal file
@@ -0,0 +1,39 @@
|
||||
import pandas as pd
|
||||
from sklearn.tree import DecisionTreeClassifier
|
||||
from sklearn.metrics import accuracy_score
|
||||
from sklearn.model_selection import train_test_split
|
||||
|
||||
# Загрузка данных
|
||||
data = pd.read_csv('ufo_sighting_data.csv')
|
||||
|
||||
# Выбор признаков
|
||||
features = [ 'length_of_encounter_seconds', 'latitude', 'longitude']
|
||||
target = 'UFO_shape'
|
||||
# Удаление строк содержащих NaN
|
||||
data.dropna(inplace=True)
|
||||
|
||||
# Удаление столбцов содержащих NaN
|
||||
data.dropna(axis='columns', inplace=True)
|
||||
|
||||
# Разделение данных на обучающую и тестовую выборки
|
||||
train_data, test_data, train_labels, test_labels = train_test_split(data[features], data[target], test_size=0.2, random_state=42)
|
||||
|
||||
# Создание и обучение модели дерева решений
|
||||
model = DecisionTreeClassifier()
|
||||
model.fit(train_data, train_labels)
|
||||
|
||||
# Прогнозирование на тестовой выборке
|
||||
predictions = model.predict(test_data)
|
||||
|
||||
# Оценка точности модели
|
||||
accuracy = accuracy_score(test_labels, predictions)
|
||||
print('Точность модели на тестовой выборке:', accuracy)
|
||||
|
||||
# Прогнозирование на оставшемся проценте данных
|
||||
remaining_data = data.drop(test_data.index)
|
||||
remaining_predictions = model.predict(remaining_data[features])
|
||||
|
||||
# Вывод результатов
|
||||
print('Прогнозы по оставшемуся проценту данных:', remaining_predictions)
|
||||
|
||||
# Сделайте необходимые выводы
|
||||
1
kutygin_andre_lab_3/ufo_sighting_data.csv
Normal file
1
kutygin_andre_lab_3/ufo_sighting_data.csv
Normal file
File diff suppressed because one or more lines are too long
44
podkorytova_yulia_lab_7/README.md
Normal file
44
podkorytova_yulia_lab_7/README.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# Лабораторная работа 7. Рекуррентная нейронная сеть и задача генерации текста
|
||||
### Задание на лабораторную:
|
||||
Выбрать художественный текст (русскоязычный и англоязычный) и обучить на нем рекуррентную нейронную сеть для решения задачи генерации.
|
||||
Подобрать архитектуру, справляющуюся достаточно хорошо с обоими видами текстов, и параметры так, чтобы приблизиться к максимально осмысленному результату.
|
||||
|
||||
***
|
||||
### Как запустить лабораторную работу:
|
||||
Для запуска лабораторной работы необходимо открыть файл `lr7.py`, нажать на ПКМ и в выпадающем списке выбрать опцию "Run".
|
||||
***
|
||||
### Технологии:
|
||||
**NumPy (Numerical Python)** - это библиотека Python, которую применяют для математических вычислений: начиная с базовых функций и заканчивая линейной алгеброй.
|
||||
|
||||
**TensorFlow** - это библиотека для машинного обучения, группы технологий, которая позволяет обучать искусственный интеллект решению разных задач.
|
||||
|
||||
**Keras** - это библиотека для языка программирования Python, которая предназначена для глубокого машинного обучения. Она позволяет быстрее создавать и настраивать модели — схемы, по которым распространяется и подсчитывается информация при обучении.
|
||||
|
||||
**Keras Preprocessing** - это модуль предварительной обработки и дополнения данных библиотеки глубокого обучения Keras. Он предоставляет утилиты для работы с данными изображения, текстовыми данными и данными последовательности.
|
||||
|
||||
**Tokenizer** - это инструмент, предоставляемый библиотекой Keras, который используется для токенизации текста (разделения текста на отдельные токены или слова). Токенизатор в Keras предоставляет функции для преобразования текста в последовательности числовых индексов.
|
||||
***
|
||||
### Что делает лабораторная работа:
|
||||
В лабораторной работе сначала данные считываются из файла, указанного в переменной *file_path*, создается экземпляр *Tokenizer*, который обучается на тексте из файла.
|
||||
Далее текст преобразуется в последовательности чисел с помощью функции *texts_to_sequences*, создаются обучающие данные путем создания последовательностей из слов и производится предобработка данных, чтобы все последовательности имели одинаковую длину, используя функцию *pad_sequences*.
|
||||
Данные разделяются на входные и выходные, создается модель рекуррентной нейронной сети с использованием *Sequential* и слоев *Embedding* (преобразует индексы слов в плотные векторные представления), *LSTM* ( рекуррентный слой, который обрабатывает последовательности данных с учетом долгосрочных зависимостей), *Dropout* (применяет случайное обнуление некоторых элементов входных данных во время обучения) и *Dense* (слой нейронной сети, в котором каждый нейрон связан со всеми нейронами предыдущего слоя).
|
||||
Модель компилируется с оптимизатором *'adam'*, функцией потерь *'sparse_categorical_crossentropy'* и метрикой *'accuracy'* и обучается на входных и выходных данных и на 150 эпохах.
|
||||
После генерируется текст на основе заданного начального предложения с помощью обученной модели. В функции генерации начальный текст преобразуется в последовательность чисел с помощью токенизатора, производится предобработка последовательности чисел, предсказывается следующее слово и выбирается наиболее вероятное, после этого предсказанное слово добавлется к начальному тексту.
|
||||
|
||||
Результатом работы являются сгенерированные тексты из 25 слов на русском и английском языках, которые начинаются со слов *'Зима'* и *'Winter'* и составляются на основе исходных текстов из файлов `rus.txt` и `eng.txt` соответсвенно.
|
||||
***
|
||||
### Пример выходных данных:
|
||||
***Пример работы и сгенерированный русский текст***
|
||||

|
||||
...
|
||||

|
||||
Сгенерированный текст: "Зима – лучшее время года зима – это самое холодное время года она волшебная потому что всё укрыто белым снегом и это похоже на сказку зимой".
|
||||
|
||||
***Пример работы и сгенерированный английский текст***
|
||||

|
||||
...
|
||||

|
||||
Сгенерированный текст: "Winter is the best time of the year winter is the coldest time of the year it is magical because everything is covered with white snow".
|
||||
***
|
||||
**Вывод**: результатом лабораторной работы стали сгенерированные при помощи рекурентной нейронной сети, обученной на 150 эпохах, тексты из 25 слов на русском и английском языках.
|
||||
Программа сгенеририровала достаточно осмысленный текст, очень похожий на исходный, как на русском, так и на английском языках. Это говорит о правильно подобранных архитектуре и параметрах.
|
||||
5
podkorytova_yulia_lab_7/eng.txt
Normal file
5
podkorytova_yulia_lab_7/eng.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
Winter is the best time of the year.
|
||||
|
||||
Winter is the coldest time of the year. It is magical because everything is covered with white snow and it looks like a fairy tale. In winter, the nights are longer and the days are shorter, but this does not prevent children from having fun and enjoying this time of year.
|
||||
|
||||
Children usually spend time outside in winter playing snowballs, sledding, skating or skiing and just playing with friends. There are many holidays in winter, one of which is Christmas, when families spend time together and give each other gifts. I think that winter is a wonderful time of the year.
|
||||
BIN
podkorytova_yulia_lab_7/engRes1.JPG
Normal file
BIN
podkorytova_yulia_lab_7/engRes1.JPG
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 37 KiB |
BIN
podkorytova_yulia_lab_7/engRes2.JPG
Normal file
BIN
podkorytova_yulia_lab_7/engRes2.JPG
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 50 KiB |
68
podkorytova_yulia_lab_7/lr7.py
Normal file
68
podkorytova_yulia_lab_7/lr7.py
Normal file
@@ -0,0 +1,68 @@
|
||||
import numpy as np
|
||||
from tensorflow import keras
|
||||
from tensorflow.keras.preprocessing.text import Tokenizer
|
||||
from tensorflow.keras.preprocessing.sequence import pad_sequences
|
||||
|
||||
# функция подготовки текста, создания и тренировки модели
|
||||
def train_model(file_path, epochs):
|
||||
# cчитывание данных из файла
|
||||
f = open(file_path, encoding='utf-8')
|
||||
data = f.read()
|
||||
f.close()
|
||||
|
||||
# создание токенизатора
|
||||
tokenizer = Tokenizer()
|
||||
tokenizer.fit_on_texts([data])
|
||||
|
||||
# преобразование текста в последовательности чисел
|
||||
sequences = tokenizer.texts_to_sequences([data])
|
||||
|
||||
# создание обучающих данных
|
||||
input_sequences = []
|
||||
for sequence in sequences:
|
||||
for i in range(1, len(sequence)):
|
||||
n_gram_sequence = sequence[:i+1]
|
||||
input_sequences.append(n_gram_sequence)
|
||||
|
||||
# предобработка для получения одинаковой длины последовательностей
|
||||
max_sequence_len = max([len(sequence) for sequence in input_sequences])
|
||||
input_sequences = pad_sequences(input_sequences, maxlen=max_sequence_len, padding='pre')
|
||||
|
||||
# разделение на входные и выходные данные
|
||||
x = input_sequences[:, :-1]
|
||||
y = input_sequences[:, -1]
|
||||
|
||||
# создание модели рекуррентной нейронной сети
|
||||
model = keras.Sequential()
|
||||
model.add(keras.layers.Embedding(len(tokenizer.word_index)+1, 100, input_length=max_sequence_len-1))
|
||||
model.add(keras.layers.Dropout(0.2))
|
||||
model.add(keras.layers.LSTM(150))
|
||||
model.add(keras.layers.Dense(len(tokenizer.word_index)+1, activation='softmax'))
|
||||
|
||||
# компиляция и обучение модели
|
||||
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
|
||||
model.fit(x, y, epochs=epochs, verbose=1)
|
||||
|
||||
return model, tokenizer, max_sequence_len
|
||||
|
||||
# функция генерации текста
|
||||
def generate_text(model, tokenizer, max_sequence_len, seed_text, next_words):
|
||||
for _ in range(next_words):
|
||||
token_list = tokenizer.texts_to_sequences([seed_text])[0]
|
||||
token_list = pad_sequences([token_list], maxlen=max_sequence_len-1, padding='pre')
|
||||
predicted = model.predict(token_list)
|
||||
predict_index = np.argmax(predicted, axis=-1)
|
||||
word = tokenizer.index_word.get(predict_index[0])
|
||||
seed_text += " " + word
|
||||
|
||||
return seed_text
|
||||
|
||||
# русский текст
|
||||
model, tokenizer, max_sequence_len = train_model('rus.txt', 150)
|
||||
rus_text = generate_text(model, tokenizer, max_sequence_len, "Зима", 25)
|
||||
print(rus_text)
|
||||
|
||||
# английский текст
|
||||
model, tokenizer, max_sequence_len = train_model('eng.txt', 150)
|
||||
eng_text = generate_text(model, tokenizer, max_sequence_len, "Winter", 25)
|
||||
print(eng_text)
|
||||
5
podkorytova_yulia_lab_7/rus.txt
Normal file
5
podkorytova_yulia_lab_7/rus.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
Зима – лучшее время года.
|
||||
|
||||
Зима – это самое холодное время года. Она волшебная, потому что всё укрыто белым снегом и это похоже на сказку. Зимой ночи длиннее, а дни короче, но это не мешает детям развлекаться и наслаждаться этим временем года.
|
||||
|
||||
Обычно зимой дети проводят время на улице, играя в снежки, катаясь на санках, коньках или лыжах и просто играя с друзьями. Зимой много праздников, одним из которых является рождество, когда семьи проводят время вместе и дарят друг другу подарки. Я считаю, что зима – это чудесное время года.
|
||||
BIN
podkorytova_yulia_lab_7/rusRes1.JPG
Normal file
BIN
podkorytova_yulia_lab_7/rusRes1.JPG
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 37 KiB |
BIN
podkorytova_yulia_lab_7/rusRes2.JPG
Normal file
BIN
podkorytova_yulia_lab_7/rusRes2.JPG
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 45 KiB |
Reference in New Issue
Block a user