Постройте график функции y х2 3х 2. Квадратичная и кубическая функции
Разделы: Математика
Тема: “Построение графика квадратной
функции, содержащей модуль”.
(На примере графика функции у = х 2 — 6x + 3.)
Цель.
- Исследовать расположение графика функции на координатной плоскости в зависимости от модуля.
- Развить навыки построения графика функции, содержащей модуль.
Ход урока.
1. Этап актуализации знаний.
а) Проверка домашнего задания.
Пример 1. Построить график функции у = х 2 — 6х + 3. Найти нули функции.
Решение.
2. Координаты вершины параболы: х= — b/2а = — (-6)/2=3, у(3) = 9 – 18 + 3 = — 6, А(3; -6).
4. Нули функции: у(х) = 0, х 2 — 6х + 3 = 0, D = 36 — 4·3 = 36 – 12 = 24, D>0,
x 1,2 = (6 ± )/2 = 3 ± ; В(3 — ;0), С(3 + ;0).
График на рис.1.
Алгоритм построения графика квадратной функции.
1. Определить направление “ветвей” параболы.
2. Вычислить координаты вершины параболы.
3. Записать уравнение оси симметрии.
4. Вычислить несколько точек.
б) Рассмотрим построение графиков линейных функций, содержащих модуль:
1. у = |х|. График функции на рисунке 2.
2.у = |х| + 1. График функции на рисунке 3.
3. у = |х + 1|. График функции рисунке 4.
Вывод.
1. График функции у = |х| + 1 получается из графика функции у = |х| параллельным переносом на вектор {0;1}.
2. График функции у = |х + 1| получается из графика функции у = |х| параллельным переносом на вектор {-1;0}.
2.Опирационно-исполнительная часть.
Этап исследовательской работы. Работа в группах.
Группа 1. Построить графики функций:
а) у = х 2 — 6|x| + 3,
б) у = |х 2 — 6х + 3|.
Решение.
1.Построить график функции у = х 2 -6х+3.
2. Отобразить его симметрично относительно оси Оу.
График на рисунке 5.
б) 1. Построить график функции у = х 2 — 6х + 3.
2. Отобразить его симметрично относительно оси Ох.
График функции на рисунке 6.
Вывод.
1. График функции у = f(|x|) получается из графика функции у = f(x), отображением относительно оси Оу.
2. График функции у = |f(x)| получается из графика функции у = f(x), отображением относительно оси Ох.
Группа 2.Построить графики функций:
а) у = |x 2 — 6|x| + 3|;
б) y = |x 2 — 6x + 3| — 3.
Решение.
1. График функции у = х 2 + 6x + 3 отображаем относительно оси Оу, получается график функции у = х 2 — 6|x| + 3.
2. Полученный график отображаем симметрично относительно оси Ох.
График функции на рисунке 7.
Вывод.
График функции y = |f (|x|)| получается из графика функции у = f(х), последовательным отображением относительно осей координат.
1. График функции у = х 2 — 6х + 3 отображаем относительно оси Ох.
2. Полученный график переносим на вектор {0;-3}.
График функции на рисунке 8.
Вывод. График функции у = |f(x)| + a получается из графика функции у = |f(x)| параллельным переносом на вектор {0,a}.
Группа 3.Построить график функции:
а) у = |x|(х — 6) + 3; б) у = х|x — 6| + 3.
Решение.
а) у = |x| (x — 6) + 3, имеем совокупность систем:
Строим график функции у = -х 2 + 6x + 3 при х
График функции на рисунке 9.
б) у = х |х — 6| + 3, имеем совокупность систем:
Строим график функции у = — х 2 + 6х + 3 при х 6.
2. Координаты вершины параболы: х = — b/2a = 3, у(3) =1 2, А(3;12).
3. Уравнение оси симметрии: х = 3.
4. Несколько точек: у(2) = 11, у(1) = 3; у(-1) = — 4.
Строим график функции у = х 2 — 6х + 3 при х = 7 у(7) = 10.
График на рис.10.
Вывод. При решении данной группы уравнений необходимо рассматривать нули модулей, содержащихся в каждом из уравнений. Затем строить график функции на каждом из полученных промежутков.
(При построении графиков данных функций каждая группа исследовала влияние модуля на вид графика функции и сделала соответствующие заключения.)
Получили сводную таблицу для графиков функций, содержащих модуль.
Таблица построения графиков функций, содержащих модуль.
Группа 4.
Построить график функции:
а) у = х 2 — 5x + |x — 3|;
б) у = |x 2 — 5x| + x — 3.
Решение.
а) у = х 2 — 5х + |х — 3|, переходим к совокупности систем:
Строим график функции у = х 2 -6х + 3 при х 3,
затем график функции у = х 2 — 4х — 3 при х > 3 по
точкам у(4) = -3, у(5) = 2, у(6) = 9.
График функции на рисунке 11.
б) у = |х 2 — 5х| + х — 3, переходим к совокупности систем:
Строим каждый график на соответствующем интервале.
График функции на рисунке 12.
Вывод.
Выяснили влияние модуля в каждом слагаемом на вид графика.
Самостоятельная работа.
Построить график функции:
а) у = |х 2 — 5х + |x — 3||,
б) у= ||x 2 — 5x| + х — 3|.
Решение.
Предыдущие графики отображаем относительно оси Ох.
Группа.5
Построить график функции: у =| х — 2| (|x| — 3) — 3.
Решение.
Рассмотрим нули двух модулей: x = 0, х – 2 = 0. Получим интервалы постоянного знака.
Имеем совокупность систем уравнений:
Строим график на каждом из интервалов.
График на рисунке 15.
Вывод. Два модуля в предложенных уравнениях существенно усложнили построение общего графика, состоящего из трех отдельных графиков.
Учащиеся записывали выступления каждой из групп, записывали выводы, участвовали в самостоятельной работе.
3.
Задание на дом.Построить графики функций с различным расположением модуля:
1. у = х 2 + 4х + 2;
2. у = — х 2 + 6х — 4.
4. Рефлексивно – оценочный этап.
1.Оценки за урок складываются из отметок:
а) за работу в группе;
б) за самостоятельную работу.
2. Какой момент был наиболее интересен на уроке?
3. Трудное ли домашнее задание?
Построить функцию
Мы предлагаем вашему вниманию сервис по потроению графиков функций онлайн, все права на который принадлежат компании
Преимущества построения графиков онлайн
- Визуальное отображение вводимых функций
- Построение очень сложных графиков
- Построение графиков, заданных неявно (например эллипс x^2/9+y^2/16=1)
- Возможность сохранять графики и получать на них ссылку, которая становится доступной для всех в интернете
- Управление масштабом, цветом линий
- Возможность построения графиков по точкам, использование констант
- Построение одновременно нескольких графиков функций
- Построение графиков в полярной системе координат (используйте r и θ(\theta))
С нами легко в режиме онлайн строить графики различной сложности. 2 называется квадратичной функцией. Графиком квадратичной функции является парабола. Общий вид параболы представлен на рисунке ниже.
Квадратичная функция
Рис 1. Общий вид параболы
Как видно из графика, он симметричен относительно оси Оу. Ось Оу называется осью симметрии параболы. Это значит, что если провести на графике прямую параллельную оси Ох выше это оси. То она пересечет параболу в двух точках. Расстояние от этих точек до оси Оу будет одинаковым.
Ось симметрии разделяет график параболы как бы на две части. Эти части называются ветвями параболы. А точка параболы которая лежит на оси симметрии называется вершиной параболы. То есть ось симметрии проходит через вершину параболы. Координаты этой точки (0;0).
Основные свойства квадратичной функции
1. При х =0, у=0, и у>0 при х0
2. Минимальное значение квадратичная функция достигает в своей вершине. Ymin при x=0; Следует также заметить, что максимального значения у функции не существует.
3. Функция убывает на промежутке (-∞;0] и возрастает на промежутке }
Интегрированыый открытый урок в 9-м классе (математика + информатика) на тему «Построение графиков с модулями»
Тема: Построение графиков с модулем.
Цели:
- Закрепить понятие «График функции; научить строить графики с модулем; научить построению графиков с модулем в табличном процессоре Excel;
- Развивать аналитическое мышление путем сравнения способов построения графиков функции с модулем в математике и информатике;
- Воспитывать культуру общения учащихся друг с другом при работе в группах.
ХОД УРОКА
1. Повторение пройденного материала
Ответить на вопросы:
а) Что такое область определения функции?
Определение. Областью определения функции называется множество значений переменной, при которых данная функция имеет смысл.
б) Что такое график функции?
Определение. Графиком функции называется множество всех точек координатной плоскости, абсциссы которых равны значениям независимой переменной из области определения этой функции, а координаты – соответствующим значениям функции.
2. Объяснение нового материала
Выступление учащегося.
а) Графиком функции у = |х| есть прямой угол с
вершиной в т.(0,0), т.к. функция определена на
множестве всех действительных чисел,
т.к. , то
при х > 0 получаем функцию у = х –
биссектриса 1 координатного угла, а при х < 0
получаем функцию у = – х – биссектриса 2
координатного угла. (показать на слайде)
б) Графиком функции у = – |х| является прямой
угол с вершиной в т. (0,0), но стороны угла
направлены вниз.
в) Для построение графика функции у =
|х| + 3 график функции у = |x| нужно сдвинуть по оси у на 3 единицы вверх. |
г) Для построения графика функции
у = |х – 5| график функции у = |x| нужно сдвинуть по оси х на 5 единиц вправо. |
д) Для построение графика функции у = |х +
5| – 3 график функции у = |x| нужно сдвинуть по оси х на 5 единиц влево и на 3 единицы вниз по оси у. |
е) График функции у = 2 |х|
получается из графика у = |х| растяжением от оси ОХ в два раза. |
Учитель математики: Построить графики функций у = |х – 2| + |х + 3| и у = |х – 2| – |х + 3|
Как вы думаете, как построить первый график? (Взять значения и сложить ординаты графиков функций у = |х – 2| и у = |х + 3| соответствующих одним и тем же абсциссам)
При х = – 3, у = 5 и при х = 2, у = 5. Возьмем еще значения х = – 4, у = 7 и х = 3, у = 7. Поэтому, для построения такого графика достаточно взять значения х = – 3, 2, – 4, 3. То есть значения, при которых каждый из модулей равен 0 и по одному значению больше их или меньше.
Вообще, для построения графика функции у = |х – а| + |х – в|, достаточно взять значение данной функции в точках а и в и в точках, меньших или больших а иb.
Такой график называется «Корыто»
Таким же способом строится график функции у = |х – а| – |х – в|.
Такой график называется «ступенька».
Построим график функции у = |х + 1| – |х – 2|
Такие функции называются полезными. Есть еще полезные функции, для которых можно построить графики, которые имеют свои названия. Например, график функции: («Волна»)
График функции («W»)
График функции а > 0 («Канава»)
График функции а < b («Горка»)
3.
Учитель информатики: Ребята, давайте теперь вспомним, как можно построить графики функций в табличном процессоре Excel.
Выступление учащегося.
Электронные таблицы позволяют обрабатывать большие массивы числовых данных. В отличие от таблиц на бумаге электронные таблицы обеспечивают проведение динамических вычислений, то есть пересчет по формулам при введении новых чисел. В математике с помощью электронных таблиц можно представить функцию в числовой форме и построить ее график.
Для того чтобы построить график функции необходимо выполнить следующие действия:
1. Сначала нужно ввести в ячейки таблицы Excel значения аргумента функции, при этом используя операцию Автозаполнение. Сначала в первую ячейку строки аргументов вводится наименьшее значение аргумента, а во вторую ячейку следующее за ним значение. Далее выделяются эти две ячейки и все остальные ячейки заполняются автоматически до конечного значения аргумента.
2. Затем нужно вычислить значения функции в указанных точках при помощи клавиатуры или при помощи Мастера функций. Заполнение таблицы можно существенно ускорить, если использовать операцию Заполнить. Сначала в первую ячейку строки значений функции вводится формула вычисления функции, которая начинается со знака «равно», далее эта формула вводится во все остальные ячейки таблицы с использованием операции Заполнить вправо.
3. После этого производится построение диаграммы-графика с помощью мастера диаграмм, который позволяет создать диаграмму по шагам с помощью серии диалоговых панелей:
- На первом шаге необходимо выделить в полученной таблице диапазон исходных данных и выбрать тип диаграммы.
- На втором шаге необходимо определить, в строках или в столбцах хранятся названия категорий и ряд данных, а также уточнить, в какой строке или каком столбце содержатся категории.
- На третьем шаге необходимо настроить внешний вид диаграммы: ввести заголовок диаграммы и название осей, уточнить параметры шкал осей категорий и значений, определить наличие и внешний вид сетки и легенды и т.д.
- На четвертом шаге необходимо выбрать вариант размещения диаграммы: на отдельном листе или на листе с данными (внедренная диаграмма)
В результате будет построен нужный график функции.
Учитель информатики: Ну что,
вспомнили, как строится диаграмма в табличном
процессоре Excel? А теперь давайте выясним, на что
именно нужно обратить внимание при построении
графиков функций с модулем.
Во-первых, правильно выбрать диапазон значений
аргумента (то есть взять нужные точки для того,
чтобы график отобразился полностью).
Во-вторых, правильно ввести формулу в первую
ячейку. Для этого в электронных таблицах имеется
несколько сотен встроенных функций, среди
которых есть и категория Математические. Так как
мы сегодня строим графики с модулем, то будем
использовать функцию ABS – абсолютное значение
аргумента (то есть модуль). Запишите эту функцию.
Далее для полученного набора данных нужно
построить график с помощью Мастера диаграмм, при
этом правильно подобрав тип диаграммы. В нашем
случае мы должны выбрать точечную диаграмму со
значениями, соединенными отрезкам, так как
графики строятся по точкам.
4. Самостоятельная работа
Задание по группам: (3 группы): Построить графики данных функций в тетрадях и в табличном процессоре Excel.
I группа |
II группа |
III группа |
|
|
|
Ответы:
I группа
y = |x + 4| – 3 |
II группа
y = |x – 2| + 5 | y = |x + 2| + |x – 5| | y = |x + 2| – |x – 5| |
III группа
y = |x + 3| – 4 | y = |x – 3| + |x + 4| | y = |x – 3| – |x + 4| |
5. Итог урока. Оценки
Проверка правильности построения графиков в тетрадях и на компьютере.
Учитель математики: Ребята, скажите пожалуйста, сколько нужно взять точек, чтобы построить такие графики?
Предполагаемый ответ: Достаточно взять четыре точки (значения a и b и по одному значению больше и меньше a и b)
Учитель информатики: А теперь скажите, какие точки нужно взять, чтобы построить такие графики в табличном процессоре Excel.
Предполагаемый ответ: Нужно пройти все значения с шагом в единицу от меньшего, чем a или b до большего a или b в зависимости от того b < a или b > a
Общий вывод: Без знания построения графиков с модулем в математике (то есть выбор значений аргумента функции) невозможно правильно построить график функции с модулем в табличном процессоре Excel.
Домашнее задание: § 12 № 163 (1, 5, 6)
у = |x + 3| + 2 | у = |x| + |x – 2| | y = |x + 1| – |x| |
Придумайте и постройте в тетради и на компьютере подобные графики.
Приложение
Знакомство с модулями, слоями и моделями
Для машинного обучения в TensorFlow вам, вероятно, потребуется определить, сохранить и восстановить модель.
Модель, абстрактно:
- Функция, которая вычисляет что-то на тензорах ( прямой проход )
- Некоторые переменные, которые могут быть обновлены в ответ на обучение
В этом руководстве вы заглянете под поверхность Keras, чтобы увидеть, как определяются модели TensorFlow. Здесь рассматривается, как TensorFlow собирает переменные и модели, а также как они сохраняются и восстанавливаются.
Примечание: Если вы хотите сразу начать работу с Keras, см. коллекцию руководств по Keras.Настройка
импортировать тензорный поток как tf из даты и времени импортировать дату и время %load_ext тензорная доска
Определение моделей и слоев в TensorFlow
Большинство моделей состоят из слоев. Слои — это функции с известной математической структурой, которые можно использовать повторно и которые имеют обучаемые переменные. В TensorFlow большинство высокоуровневых реализаций слоев и моделей, таких как Keras или Sonnet, построены на одном и том же базовом классе: тс.Модуль
.
Вот пример очень простого tf.Module
, работающего со скалярным тензором:
class SimpleModule(tf.Module): def __init__(я, имя=Нет): супер().__init__(имя=имя) self.a_variable = tf.Variable(5.0, name="train_me") self.non_trainable_variable = tf.Variable(5.0, trainable=False, name="do_not_train_me") защита __call__(я, х): вернуть self.a_variable * x + self.non_trainable_variable simple_module = простой модуль (имя = "простой") простой_модуль (tf.constant (5.0))
Модули и, в более широком смысле, слои — это терминология глубокого обучения для «объектов»: они имеют внутреннее состояние и методы, использующие это состояние.
В __call__
нет ничего особенного, кроме того, что он действует как вызываемый Python; вы можете вызывать свои модели с любыми функциями, какие пожелаете.
Вы можете включать и выключать обучаемость переменных по любой причине, включая замораживание слоев и переменных во время тонкой настройки.
Примечание: tf.Module
является базовым классом как для tf.keras.layers.Layer
, так и для tf.keras.Model
, поэтому все, с чем вы столкнетесь здесь, также применимо в Keras. По причинам исторической совместимости слои Keras не собирают переменные из модулей, поэтому ваши модели должны использовать только модули или только слои Keras. Однако методы, показанные ниже для проверки переменных, одинаковы в любом случае. По подклассу tf.Модуль
, любой tf. Переменная
или экземпляров tf.Module
, назначенных свойствам этого объекта, собираются автоматически. Это позволяет сохранять и загружать переменные, а также создавать коллекции tf.Module
s.
# Все обучаемые переменные print("обучаемые переменные:", simple_module.trainable_variables) # Каждая переменная print("все переменные:", simple_module.variables)
обучаемые переменные&двоеточие; (,) все переменные&двоеточие; ( , )
Это пример двухслойной линейно-слойной модели, состоящей из модулей.
Первый плотный (линейный) слой:
класс Dense(tf.Module): def __init__(self, in_features, out_features, name=None): супер(). __init__(имя=имя) self.w = tf.Variable( tf.random.normal([in_features, out_features]), имя='w') self.b = tf.Variable(tf.zeros([out_features]), name='b') защита __call__(я, х): y = tf.matmul(x, self.w) + self.b вернуть tf.nn.relu(y)
И затем полная модель, которая создает два экземпляра слоя и применяет их:
class SequentialModule(tf.Module): def __init__(я, имя=Нет): супер().__init__(имя=имя) self.dense_1 = Плотный (in_features=3, out_features=3) self.dense_2 = Плотный (in_features=3, out_features=2) защита __call__(я, х): х = self.dense_1 (х) вернуть self.dense_2(x) # Вы сделали модель! my_model = SequentialModule(name="the_model") # Вызвать его со случайными результатами print("Результаты модели:", my_model(tf.constant([[2.0, 2.0, 2.0]])))
Результаты модели: tf.Tensor([[0.0.]], shape=(1, 2), dtype=float32)
Экземпляры tf. Module
будут автоматически рекурсивно собирать любые назначенные ему экземпляры tf.Variable
или tf.Module
. Это позволяет вам управлять коллекциями tf.Module
с одним экземпляром модели, а также сохранять и загружать целые модели.
печать ("Подмодули:", my_model.submodules)
Подмодули&колон; (<__main__. Плотный объект по адресу 0x7f9a84a02d90>, <__main__.Dense объект по адресу 0x7f9a84a0d820>)
для var в my_model.variables: печать(вар, "\n")
, 0,4479225]], dtype=float32)> Variable 'b:0' shape=(2,) dtype=float32, numpy=array([0., 0.], dtype=float32)>
Ожидание создания переменных
Возможно, вы заметили здесь, что вы должны определить как входные, так и выходные размеры слоя. Это значит, что переменная w
имеет известную форму и может быть размещена.
Откладывая создание переменной до первого вызова модуля с определенной формой ввода, вам не нужно заранее указывать размер ввода.
класс FlexibleDenseModule(tf.Module): # Примечание: нет необходимости в `in_features` def __init__(self, out_features, name=None): супер().__init__(имя=имя) self.is_built = Ложь self.out_features = вне_функции защита __call__(я, х): # Создавать переменные при первом вызове. если не self.is_built: self.w = tf.Variable( tf.random.normal([x.shape[-1], self.out_features]), name='w') self.b = tf.Variable(tf.zeros([self.out_features]), name='b') self.is_built = Истина y = tf.matmul(x, self.w) + self.b вернуть tf.nn.relu(y)
# Используется в модуле класс MySequentialModule (tf.Module): def __init__(я, имя=Нет): супер().__init__(имя=имя) self.dense_1 = ГибкийDenseModule(out_features=3) self.dense_2 = ГибкийDenseModule(out_features=2) защита __call__(я, х): х = self.dense_1 (х) вернуть self.dense_2(x) my_model = MySequentialModule(name="the_model") print("Результаты модели:", my_model(tf.constant([[2.0, 2.0, 2.0]])))
Результаты модели: tf.Tensor([[0.0.36266896]], форма=(1, 2), dtype=float32)
Эта гибкость является причиной того, что слоям TensorFlow часто требуется указывать только форму своих выходных данных, например, tf. keras.layers.Dense
, а не размер входных и выходных данных.
Сохранение весов
Вы можете сохранить tf.Module
и как контрольную точку, и как SavedModel.
Контрольные точки — это просто веса (то есть значения набора переменных внутри модуля и его подмодулей):
chkp_path = "my_checkpoint" контрольная точка = tf.train.Checkpoint (модель = моя_модель) контрольная точка.write(chkp_path)
'мой_контрольный пункт'
Контрольные точки состоят из двух типов файлов: самих данных и индексного файла для метаданных. Индексный файл отслеживает, что фактически сохраняется, и нумерацию контрольных точек, в то время как данные контрольных точек содержат значения переменных и пути поиска их атрибутов.
лс my_checkpoint*
my_checkpoint.data-00000-of-00001 my_checkpoint. index
Вы можете заглянуть внутрь контрольной точки, чтобы убедиться, что вся коллекция переменных сохранена, отсортирована по содержащему их объекту Python.
tf.train.list_variables(chkp_path)
[('_CHECKPOINTABLE_OBJECT_GRAPH', []), ('model/dense_1/b/.ATTRIBUTES/VARIABLE_VALUE', [3]), ('model/dense_1/w/.ATTRIBUTES/VARIABLE_VALUE', [3, 3]), ('model/dense_2/b/.ATTRIBUTES/VARIABLE_VALUE', [2]), ('model/dense_2/w/.ATTRIBUTES/VARIABLE_VALUE', [3, 2])]
Во время распределенного (многомашинного) обучения их можно сегментировать, поэтому они нумеруются (например, «00000-из-00001»). В данном случае, однако, есть только один осколок.
Когда вы загружаете модели обратно, вы перезаписываете значения в своем объекте Python.
новая_модель = MySequentialModule() new_checkpoint = tf.train.Checkpoint (модель = новая_модель) new_checkpoint.restore("my_checkpoint") # Должен быть тот же результат, что и выше new_model (tf. constant ([[2.0, 2.0, 2.0]]))
Примечание: Поскольку контрольные точки лежат в основе длительных рабочих процессов обучения
tf.checkpoint.CheckpointManager
— вспомогательный класс, значительно упрощающий управление контрольными точками. Дополнительные сведения см. в руководстве по контрольным точкам обучения.Сохранение функций
TensorFlow может запускать модели без исходных объектов Python, как демонстрируют TensorFlow Serving и TensorFlow Lite, даже если вы загружаете обученную модель из TensorFlow Hub.
TensorFlow должен уметь выполнять вычисления, описанные в Python, но без исходного кода . Для этого можно сделать график , который описан в руководстве Введение в графики и функции.
Этот граф содержит операции, или ops , которые реализуют функцию.
Вы можете определить граф в приведенной выше модели, добавив декоратор @tf.function
, чтобы указать, что этот код должен выполняться как граф.
класс MySequentialModule(tf.Module): def __init__(я, имя=Нет): супер().__init__(имя=имя) self.dense_1 = Плотный (in_features=3, out_features=3) self.dense_2 = Плотный (in_features=3, out_features=2) @tf.function защита __call__(я, х): х = self.dense_1 (х) вернуть self.dense_2(x) # Вы сделали модель с графиком! my_model = MySequentialModule(name="the_model")
Модуль, который вы сделали, работает точно так же, как и раньше. Каждая уникальная подпись, переданная в функцию, создает отдельный граф. Для получения подробной информации см. руководство «Введение в графики и функции».
печать (моя_модель ([[2.0, 2.0, 2.0]])) печать (моя_модель ([[[2.0, 2.0, 2.0], [2.0, 2.0, 2.0]]]))
tf. Tensor([[0.8.78006]], shape=(1, 2), dtype=float32) tf.Тензор( [[[0. 8.78006] [0. 8.78006]]], shape=(1, 2, 2), dtype=float32)
Вы можете визуализировать график, отследив его в сводке TensorBoard.
# Настроить ведение журнала. штамп = datetime.now().strftime("%Y%m%d-%H%M%S") logdir = "logs/func/%s" % штамп писатель = tf.summary.create_file_writer (logdir) # Создайте новую модель, чтобы получить свежую трассировку # Иначе сводка не увидит график. new_model = MySequentialModule() # Заключить вызов функции в скобки # tf.summary.trace_on() и tf.summary.trace_export(). tf.summary.trace_on (график = Истина) tf.profiler.experimental.start(logdir) # При трассировке вызывать только одну tf.function. z = печать (новая_модель (tf.constant ([[2.0, 2.0, 2.0]]))) с автором.as_default(): tf.summary.trace_export( имя = "my_func_trace", шаг=0, profiler_outdir=logdir)
tf.Tensor([[0.9279648 0. ]], shape=(1, 2), dtype=float32)
Запустите TensorBoard для просмотра полученной трассировки:
#docs_infra: no_execute %tensorboard --logdir журналы/функции
Создание
SavedModel
Рекомендуемый способ обмена полностью обученными моделями — использовать SavedModel
. SavedModel
содержит как набор функций, так и набор весов.
Вы можете сохранить только что обученную модель следующим образом:
tf.saved_model.save(my_model, "the_saved_model")
INFO:tensorflow:Активы, записанные в: the_saved_model/активы
# Проверить SavedModel в каталоге
ls -l the_saved_model
всего 32 drwxr-sr-x 2 kbuilder kokoro 4096 28 марта 01:20 активов -rw-rw-r-- 1 kbuilder kokoro 56 28 марта 01:20 отпечаток пальца.pb -rw-rw-r-- 1 kbuilder kokoro 17128 28 марта 01:20 save_model.pb drwxr-sr-x 2 kbuilder кокоро 4096 марта 28 01:20 переменных
# Каталог variable/ содержит контрольную точку переменных
ls -l the_saved_model/переменные
всего 8 -rw-rw-r-- 1 kbuilder kokoro 490 28 марта 01:20 переменных. данные-00000-из-00001 -rw-rw-r-- 1 kbuilder kokoro 356 28 марта 01:20 variable.index
Файл save_model.pb
представляет собой буфер протокола, описывающий функционал tf.Graph
.
Модели и слои могут быть загружены из этого представления без фактического создания экземпляра создавшего его класса. Это желательно в ситуациях, когда у вас нет (или вы не хотите) интерпретатора Python, например, при работе в масштабе или на пограничном устройстве, или в ситуациях, когда исходный код Python недоступен или практичен для использования.
Вы можете загрузить модель как новый объект:
new_model = tf.saved_model.load("the_saved_model")
new_model
, созданный при загрузке сохраненной модели, является внутренним объектом пользователя TensorFlow без каких-либо знаний о классе. Это не тип SequentialModule
.
isinstance (new_model, SequentialModule)
ЛОЖЬ
Эта новая модель работает с уже определенными входными подписями. Вы не можете добавить больше подписей к модели, восстановленной таким образом.
печать (моя_модель ([[2.0, 2.0, 2.0]])) печать (моя_модель ([[[2.0, 2.0, 2.0], [2.0, 2.0, 2.0]]]))
tf.Tensor([[0.8.78006]], shape=(1, 2), dtype=float32) tf.Тензор( [[[0. 8.78006] [0. 8.78006]]], shape=(1, 2, 2), dtype=float32)
Таким образом, используя SavedModel
, вы можете сохранять веса и графики TensorFlow, используя tf.Module
, а затем загружать их снова.
Модели и слои Keras
Обратите внимание, что до этого момента Keras не упоминался. Вы можете создать свой собственный высокоуровневый API поверх тс. Модуль
и у людей есть.
В этом разделе вы узнаете, как Keras использует tf.Module
. Полное руководство пользователя по моделям Keras можно найти в руководстве Keras.
Слои Keras
tf.keras.layers.Layer
является базовым классом всех слоев Keras и наследуется от tf.Module
.
Вы можете преобразовать модуль в слой Keras, просто заменив родителя, а затем изменив __call__
на вызов
:
класс MyDense (tf.keras.layers.Layer): # Добавление **kwargs для поддержки базовых аргументов слоя Keras def __init__(self, in_features, out_features, **kwargs): super().__init__(**kwargs) # Это скоро перейдет к этапу сборки; см. ниже self.w = tf.Variable( tf.random.normal([in_features, out_features]), имя='w') self. b = tf.Variable(tf.zeros([out_features]), name='b') деф вызов(я, х): y = tf.matmul(x, self.w) + self.b вернуть tf.nn.relu(y) simple_layer = MyDense (имя = "простой", in_features = 3, out_features = 3)
Слои Keras имеют свои собственные __call__
, которые выполняют некоторые бухгалтерские операции, описанные в следующем разделе, а затем вызывают call()
. Вы не должны заметить никаких изменений в функциональности.
простой_слой([[2.0, 2.0, 2.0]])
Сборка
stepКак уже отмечалось, во многих случаях удобно отложить создание переменных до тех пор, пока вы не будете уверены в форме ввода.
Слои Keras имеют дополнительный этап жизненного цикла, который обеспечивает большую гибкость в определении слоев. Это определено в функции сборки
.
build
вызывается ровно один раз и вызывается с формой ввода. Обычно он используется для создания переменных (весов).
Вы можете переписать слой MyDense
выше, чтобы он был гибким к размеру его входных данных:
class FlexibleDense(tf.keras.layers.Layer): # Обратите внимание на добавленный `**kwargs`, так как Keras поддерживает множество аргументов def __init__(self, out_features, **kwargs): super().__init__(**kwargs) self.out_features = вне_функции def build(self, input_shape): # Создаем состояние слоя (веса) self.w = tf.Variable( tf.random.normal([input_shape[-1], self.out_features]), name='w') self.b = tf.Variable(tf.zeros([self.out_features]), name='b') def call(self, inputs): # Определяет вычисление от входов к выходам вернуть tf.matmul (входы, self. w) + self.b # Создаем экземпляр слоя flexible_dense = Гибкая плотность (out_features = 3)
На данный момент модель еще не построена, поэтому переменных нет:
flexible_dense.variables
[]
Вызов функции выделяет переменные соответствующего размера:
# Вызов с предсказуемо случайными результатами print("Результаты модели:", flexible_dense(tf.constant([[2.0, 2.0, 2.0], [3.0, 3.0, 3.0]])))
Результаты модели: tf.Тензор( [[3,3555455 2,3450885 3,06] [5.0333185 3.5176327 5.8584757]], shape=(2, 3), dtype=float32)
гибкие_плотные.переменные
[, Variable 'flexible_dense/b:0' shape=(3,) dtype=float32, numpy=array([0., 0., 0.], dtype=float32)>]
Поскольку сборка
вызывается только один раз, входные данные будут отклонены, если входная форма несовместима с переменными слоя:
попытка: print("Результаты модели:", flexible_dense(tf.constant([[2.0, 2.0, 2.0, 2.0]]))) кроме tf.errors.InvalidArgumentError как e: print("Ошибка:", e)
Ошибка&двоеточие; Возникло исключение при вызове слоя «flexible_dense» (тип FlexibleDense). { {function_node __wrapped__MatMul_device_/job:localhost/replica:0/task:0/device:GPU:0} } Размер матрицы несовместим: В[0]&колон; [1,4], В[1]&двоеточие; [3,3] [Op:MatMul] Аргументы вызова, полученные слоем 'flexible_dense' (тип FlexibleDense): • inputs=tf.Tensor(shape=(1, 4), dtype=float32)
Слои Keras имеют гораздо больше дополнительных функций, включая:
- Дополнительные потери
- Поддержка метрик
- Встроенная поддержка дополнительного аргумента
для обучения
, позволяющего различать обучение и использование логических выводов -
методы get_config
иfrom_config
, которые позволяют точно хранить конфигурации, чтобы разрешить клонирование модели в Python
Читайте о них в полном руководстве по пользовательским слоям и моделям.
Модели Keras
Вы можете определить свою модель как вложенные слои Keras.
Однако Keras также предоставляет полнофункциональный класс моделей под названием tf.keras.Model
. Он наследуется от tf.keras.layers.Layer
, поэтому модель Keras можно использовать, вкладывать и сохранять так же, как слои Keras. Модели Keras обладают дополнительными функциями, которые упрощают их обучение, оценку, загрузку, сохранение и даже обучение на нескольких машинах.
Вы можете определить SequentialModule
сверху с почти идентичным кодом, снова преобразуя __call__
в call()
и изменяя родителя:
class MySequentialModel(tf.keras.Model): def __init__(self, name=None, **kwargs): super().__init__(**kwargs) self.dense_1 = Гибкая плотность (out_features = 3) self. dense_2 = Гибкая плотность (out_features = 2) деф вызов(я, х): х = self.dense_1 (х) вернуть self.dense_2(x) # Вы сделали модель Keras! my_sequential_model = MySequentialModel(name="the_model") # Вызов тензора со случайными результатами print("Результаты модели:", my_sequential_model(tf.constant([[2.0, 2.0, 2.0]])))
Результаты модели: tf.Tensor([[ 7.7389774 -1.2258627]], shape=(1, 2), dtype=float32)
Доступны все те же функции, включая переменные отслеживания и подмодули.
Примечание: Чтобы подчеркнуть примечание выше, необработанный tf.Module
, вложенный в слой или модель Keras, не будет собирать свои переменные для обучения или сохранения. Вместо этого вложите слои Keras внутрь слоев Keras.my_sequential_model.variables
[42729762, -0.4462564, 0.4730387]], dtype=float32)>, , , ]
my_sequential_model.submodules
(<__main__.FlexibleDense по адресу 0x7f9b79ca3be0>, <__main__.FlexibleDense по адресу 0x7f9a8d0>)
Переопределение tf.keras.Model
— это очень Pythonic подход к построению моделей TensorFlow. Если вы переносите модели из других фреймворков, это может быть очень просто.
Если вы строите модели, которые представляют собой простые сборки существующих слоев и входных данных, вы можете сэкономить время и место, используя функциональный API, который поставляется с дополнительными функциями по реконструкции модели и архитектуре.
Вот та же модель с функциональным API:
inputs = tf.keras.Input(shape=[3,]) x = FlexibleDense (3) (входы) х = гибкий плотный (2) (х) my_functional_model = tf.keras.Model (входы = входы, выходы = x) моя_функциональная_модель.summary()
Модель&двоеточие; "модель" _________________________________________________________________ Слой (тип) Выходная форма Параметр # ================================================== =============== input_1 (InputLayer) [(Нет, 3)] 0 flexible_dense_3 (FlexibleD (Нет, 3) 12 смысл) flexible_dense_4 (FlexibleD (Нет, 2) 8 смысл) ================================================== =============== Всего параметров & двоеточие; 20 Обучаемые параметры & двоеточие; 20 Необучаемые параметры & двоеточие; 0 _________________________________________________________________
моя_функциональная_модель (tf. constant ([[2.0, 2.0, 2.0]]))
Основное отличие состоит в том, что входная форма задается заранее как часть функционального процесса построения. Аргумент input_shape
в этом случае не обязательно указывать полностью; вы можете оставить некоторые размеры как None
.
input_shape
или InputLayer
в подклассовой модели; эти аргументы и слои будут игнорироваться.Сохранение моделей Keras
Модели Keras могут быть отмечены контрольными точками, и это будет выглядеть так же, как tf.Module
.
Модели Keras также можно сохранить с помощью tf. saved_model.save()
, поскольку они являются модулями. Однако модели Keras имеют удобные методы и другие функции:
my_sequential_model.save("exname_of_file")
INFO:tensorflow:Активы, записанные в: exname_of_file/assets
Так же легко их можно загрузить обратно:
реконструированная_модель = tf.keras.models.load_model("exname_of_file")
ПРЕДУПРЕЖДЕНИЕ:tensorflow:В файле сохранения не найдена конфигурация обучения, поэтому модель *не* скомпилирована. Скомпилируйте его вручную.
Keras SavedModels
также сохраняет состояния метрик, потерь и оптимизатора.
Эту реконструированную модель можно использовать, и она даст тот же результат при вызове с теми же данными:
реконструированная_модель (tf.constant ([[2.0, 2. 0, 2.0]]))
Необходимо знать больше о сохранении и сериализации моделей Keras, включая предоставление методов конфигурации для пользовательских слоев для поддержки функций. Ознакомьтесь с руководством по сохранению и сериализации.
Если вы хотите узнать больше о Keras, вы можете следовать существующим руководствам Keras здесь.
Другим примером высокоуровневого API, построенного на tf.module
, является Sonnet от DeepMind, описание которого представлено на их сайте.
Графики. Часть 1. Математические модули Ohlone Biotechnology
- Введение
- Графическая система
- Элементы графика — Маркировка
- Создание линии наилучшего соответствия
- Использование линии наилучшего соответствия для экстраполяции данных
- Проверка понимания
- Решения
Взгляните на таблицу ниже. Мы будем использовать эту таблицу в этом руководстве, чтобы помочь объяснить построение графиков. В этой таблице указаны концентрация (в мг/мл или миллиграммы на миллилитр) и абсорбция в «единицах абсорбции» (AU). Примечание: такую таблицу можно составить при работе со спектрофотометром — прибором, который мы иногда используем в биотехнологиях для измерения поглощения света растворами.
Глядя на подобную таблицу, может быть трудно отделить значимую связь от простого взгляда на цифры. Графики важны, потому что они помогают нам визуализировать данные.
Концентрация (мг/мл) | Поглощение (AU) |
---|---|
0,00 | 0,00 |
3,25 | 0,06 |
7,25 | 0,121 |
15 | 0,246 |
30 | 0,474 |
60 | 0,905 |
взгляните на рисунки под этим текстом — рисунок слева — это то, как выглядит ваш типичный график. Вы могли видеть или создавать подобные графики на одном из своих уроков математики. Он имеет по оси X и по оси Y , которые варьируются от отрицательных до положительных значений. Он также имеет начало координат (0, 0).
В биотехнологиях и на графиках «реальных приложений» нам не нужна отрицательная часть этих осей. Посмотрите еще раз на рисунок справа — это просто увеличенная и обрезанная версия вашего типичного графика. Он содержит оси x и y и по-прежнему имеет начало координат, но не включает отрицательные значения на этих осях. График на справа это тип графика, который вы увидите и будете использовать:
Помните почему мы рисуем — чтобы помочь визуализировать данные. Однако графические и графические данные — это не только числа. Числа на графике бессмысленны, если вы не придадите им значение, пометив тем, что они означают.
Взглянув на приведенные выше рисунки, вы заметите, что несколько частей помечены, например, «ось x», «начало», «метка горизонтальной оси» и «метка вертикальной оси» и так далее. Давайте пройдемся по четырем элементам маркировки графика, описанным ниже:
Метка горизонтальной оси
Метка горизонтальной оси — оси x — важна, поскольку она представляет вашу независимую переменную . Следуя нашей таблице из введения в это руководство, определите, что такое метка горизонтальной оси. «Концентрация (мг/мл)» — это наша метка по горизонтальной оси. Почему? Концентрация (мг/мл) является нашей независимой переменной. В нашем эксперименте мы изменили концентрацию, но измерили оптическую плотность. Это один из способов запомнить, что такое независимая переменная. Полезный совет: ваша независимая переменная, скорее всего, будет иметь «хорошие числа», округленные или целые .Метка вертикальной оси
Метка вертикальной оси , оси Y , представляет вашу зависимую переменную . Ваша зависимая переменная часто является тем, что вы будете измерять/записывать при сборе данных. В нашем сценарии нашей зависимой переменной является «Поглощение» (в единицах поглощения, AU). Подумайте об этом следующим образом: ваша измеренная «поглощающая способность» зависит от концентрации . Таким образом, ваша зависимая переменная зависит от вашей независимой переменной. Напомним, что нашей независимой переменной является концентрация (мг/мл). Таким образом, наша метка вертикальной оси и зависимая переменная — «Поглощение (AU)».**ВАЖНО: Вы должны включать единицы измерения с метками горизонтальной и вертикальной осей!**
Пометьте оси как «X» и «Y»
Пометьте оси, как на обычном графике, с x на горизонтальной оси и y на вертикальной оси.- Название вашего графика
Название вашего графика зависит от вас. Ваш заголовок должен относиться к данным, которые вы визуализируете. Например, мы могли бы назвать наш график как-то вроде «Поглощение против концентрации». Решая, как назвать график, помните следующее: заголовок должен соотноситься с меткой по вертикальной оси и меткой по горизонтальной оси .
При создании диаграммы необходимо помнить еще о двух вещах: очистить масштаб и размер графика .
Каждая ось на графиках, которые вы создаете, должна иметь шкалу, четкую и подходящую для ваших данных. Таблица, на которую мы ссылались до сих пор в разделе «Введение», была воссоздана здесь:
Концентрация (мг/мл) | Поглощение (AU) |
---|---|
0,00 | 0,00 |
3,25 | 0,06 |
7,25 | 0,121 |
15 | 0,246 |
30 | 0,474 |
60 | 0,905 |
Помните, что наша независимая переменная — переменная, которую мы изменяем — это Концентрация (мг/мл). Наша зависимая переменная — переменная, которую мы измеряем — это Поглощение (AU).
Здесь наши значения не представляют собой простые округленные числа, такие как 0, 10, 20, 30 и так далее. На диаграммной бумаге нет быстро выбранных мест, которые можно было бы отметить, чтобы разделить график. Мы должны определить масштаб сами. Создание шкалы может потребовать нескольких проб и ошибок, но если вы будете следовать этим шагам, определить вашу шкалу будет намного проще:
Создание четкой шкалы
- Сначала посмотрите на значения независимой переменной. Сколько их в таблице? Используйте это, чтобы подумать о том, на сколько баллов вы хотите разделить свою шкалу. У нас есть шесть значений для нашей независимой переменной. Вы можете пометить график шестью линиями и закончить график на этом. Вместо этого добавьте дополнительную отметку на график, чтобы дать себе больше места для построения данных. Ваш график может выглядеть примерно так, с семью отметками:
Теперь снова посмотрите на свои числа для независимой переменной: 0,00, 3,25, 7,25, 15, 30 и 60.
НЕ вводите эти цифры в только что созданные отметки. На шкале каждая «метка» должна иметь равное числовое расстояние до следующей. Хорошая шкала будет выглядеть так, с числовым расстоянием 10 между каждой отметкой:
.Почему мы решили разделить наш график таким образом? Помните, что последние 3 числа, с которыми мы должны работать, это 15, 30 и 60. Мы должны разместить наши самые большие значения, чтобы они соответствовали графику. Ваша горизонтальная ось (x) теперь имеет четкую шкалу! Но мы еще не закончили — нам еще нужно посмотреть на вертикальную ось (y).
- То, как мы создадим четкую шкалу для нашей вертикальной оси (ось Y), будет похоже на то, что мы сделали для нашей горизонтальной оси (ось X). У нас также есть шесть значений: 0,00, 0,06, 0,121, 0,246, 0,474 и 0,905. Не забудьте учитывать ваши самые большие значения — 0,474 и 0,905. Поэтому мы можем разделить нашу шкалу на значения 0,1 — от 0,0 до 1. Это нужно для того, чтобы убедиться, что мы включили все наши значения, от наименьшего (0,06) до наибольшего (0,905). Посмотрите на изображение ниже графика, который готов к нанесению на него данных для идеального масштаба по вертикальной оси.
Размер графика
Последний элемент графика, который необходимо покрыть, — это размер. Как вы могли заметить, наш график выше имеет хороший размер, основанный на созданной нами четкой шкале. Но что, если бы вы нарисовали этот график так, чтобы он занимал всего 3 на 3 дюйма в вашей лабораторной тетради? Как насчет колоссальных 10 на 10 дюймов? Подойдут ли эти размеры? № Общее правило размера диаграммы заключается в том, что она должна занимать не менее половины страницы лабораторной тетради .
Нанесение данных на график
Вы знаете, как маркировать график. Вы также знаете, как создать четкий масштаб и какого общего размера нарисовать свой график (без крошечных графиков, пожалуйста!). Теперь мы можем перейти к тому, как отображать данные на графике.
Мы наносим точки на график, основанный на системе координат — записывается как (x, y) , где x — положение по горизонтальной оси, а y — положение по вертикальной оси.
Нанесение точки в системе координат
Чтобы нанести точку в системе координат, выполните следующие действия:
От начала координат (0, 0) переместите указанное количество единиц по горизонтальной оси (ось x).
- От этого места переместитесь на указанное количество единиц вверх по вертикальной оси (ось Y).
- Поместите на это место маленькую точку и
- Назовите его координаты.
Пример: Нанесите точку (2,3) на упрощенный график:
- Переместите 2 единицы вправо по горизонтальной оси.
- Переместиться на 3 единицы по вертикальной оси.
- Поставьте точку в этом месте.
- Отметьте точку с ее координатами.
Давайте нанесем нашу первую «реальную» точку данных — первую точку на нашем графике зависимости поглощения от концентрации. Таблица и график для построения данных с метками и четкой шкалой приведены ниже для вашего использования.
Концентрация (мг/мл) | Поглощение (AU) |
---|---|
0,00 | 0,00 |
3,25 | 0,06 |
7,25 | 0,121 |
15 | 0,246 |
30 | 0,475 |
60 | 0,905 |
- Наша первая точка (0,00, 0,00). Это происхождение. Отметьте его точкой.
- Наша вторая точка (3,25, 0,06). Следуйте по оси X до 3,25 (синяя стрелка), затем поднимитесь на 0,06 (оранжевая стрелка) и поставьте точку. Обозначьте координату, в которой находится точка.
- Продолжайте рисовать точки на графике, используя метод перемещения по осям x и y. Здесь показаны первые три точки. Продолжайте рисовать точки, пока не будут нанесены все точки:
На нашем графике выше мы можем более четко увидеть взаимосвязь между поглощением и концентрацией:
Важно, чтобы наша линия не проходила через через каждые точки — и мы также не соединяем точки . Линия, показанная выше, называется линией наилучшего соответствия — линией, которая лучше всего соответствует нашим данным. Как и измерение, построение графиков является приблизительным. Невозможно быть на 100% точным при сборе данных или построении графика. Из-за этого мы используем линию наилучшего соответствия, чтобы точно представить наши данные. Линия наилучшего соответствия важна в экстраполяция данных. Экстраполяция — это процесс получения выводов о данных на основе уже визуализированных взаимосвязей, таких как линейная зависимость между концентрацией и поглощением.
Допустим, вы хотите приблизить оптическую плотность раствора при концентрации 50 мг/мл. Мы не проводили никаких измерений поглощения для этой конкретной концентрации, но мы можем сделать хорошее предположение о его приблизительном поглощении, используя наш график. Давайте представим, как это сделать:
- Найдите соответствующее значение на оси x, представляющей концентрацию.
- Проследите линию, пока не найдете линию наилучшего соответствия:
- От этой точки измерьте по оси в направлении «Поглощение». Это значение представляет собой приблизительную абсорбцию раствора с концентрацией 50 мг/мл:
Теперь мы экстраполировали, что поглощение раствора с концентрацией 50 мг/мл составляет приблизительно 0,75 единиц поглощения (AU).
Используйте следующую таблицу данных для построения графика. Пометьте все части графика ( Подсказка: проверьте «Элементы графика — Маркировка», чтобы узнать, какие части следует пометить ).
Концентрация (мг/мл) | Поглощение (AU) |
---|---|
0 | 0 |
4,25 | 0,034 |
7 | 0,062 |
21 | 0,165 |
35 | 0,282 |
65 | 0,524 |
Концентрация (мг/мл) | Поглощение (AU) |
---|---|
0 | 0 |
4,25 | 0,034 |
7 | 0,062 |
21 | 0,165 |
35 | 0,282 |
65 | 0,524 |
Ответьте на следующие вопросы с помощью наиболее подходящей линии:
- Какова приблизительная концентрация раствора с коэффициентом поглощения 0,3 AU?
- Какова концентрация раствора с оптической плотностью 0,08 а.