commit 2f2213df6eecf65c6aef1b23e114360e2970f5c6
parent 4bf28addf29ed149154c5b5408ceaee5f0e890ad
Author: Andrew <andrewlaack1@gmail.com>
Date: Mon, 1 Jul 2024 08:14:14 -0500
Did some image and text manipulation stuff.
Diffstat:
3 files changed, 180 insertions(+), 29 deletions(-)
diff --git a/embeddings/EmbedUsingPretrainedModel.ipynb b/embeddings/EmbedUsingPretrainedModel.ipynb
@@ -0,0 +1,61 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[-0.25, 0.28, 0.01, 0.1 , 0.14, 0.16, 0.25, 0.02, 0.07,\n",
+ " 0.13, -0.19, 0.06, -0.04, -0.07, 0. , -0.08, -0.14, -0.16,\n",
+ " 0.02, -0.24, 0.16, -0.16, -0.03, 0.03, -0.14, 0.03, -0.09,\n",
+ " -0.04, -0.14, -0.19, 0.07, 0.15, 0.18, -0.23, -0.07, -0.08,\n",
+ " 0.01, -0.01, 0.09, 0.14, -0.03, 0.03, 0.08, 0.1 , -0.01,\n",
+ " -0.03, -0.07, -0.1 , 0.05, 0.31],\n",
+ " [-0.2 , 0.2 , -0.08, 0.02, 0.19, 0.05, 0.22, -0.09, 0.02,\n",
+ " 0.19, -0.02, -0.14, -0.2 , -0.04, 0.01, -0.07, -0.22, -0.1 ,\n",
+ " 0.16, -0.44, 0.31, -0.1 , 0.23, 0.15, -0.05, 0.15, -0.13,\n",
+ " -0.04, -0.08, -0.16, -0.1 , 0.13, 0.13, -0.18, -0.04, 0.03,\n",
+ " -0.1 , -0.07, 0.07, 0.03, -0.08, 0.02, 0.05, 0.07, -0.14,\n",
+ " -0.1 , -0.18, -0.13, -0.04, 0.15]], dtype=float32)"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import tensorflow_hub as hub\n",
+ "import tensorflow as tf\n",
+ "\n",
+ "hub_layer = hub.KerasLayer(\"https://tfhub.dev/google/nnlm-en-dim50/2\")\n",
+ "sentence_embeddings = hub_layer(tf.constant([\"To be\", \"Not to be\"]))\n",
+ "sentence_embeddings.numpy().round(2)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": ".venv",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.2"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/embeddings/KerasEmbeddingPG.ipynb b/embeddings/KerasEmbeddingPG.ipynb
@@ -9,9 +9,21 @@
},
{
"cell_type": "code",
- "execution_count": 124,
+ "execution_count": 2,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2024-07-01 07:58:30.477487: I external/local_tsl/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used.\n",
+ "2024-07-01 07:58:30.480784: I external/local_tsl/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used.\n",
+ "2024-07-01 07:58:30.522090: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n",
+ "To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n",
+ "2024-07-01 07:58:31.202746: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n"
+ ]
+ }
+ ],
"source": [
"import tensorflow as tf\n",
"import pandas as pd\n",
@@ -21,9 +33,19 @@
},
{
"cell_type": "code",
- "execution_count": 125,
+ "execution_count": 3,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2024-07-01 07:58:31.966844: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
+ "2024-07-01 07:58:31.967654: W tensorflow/core/common_runtime/gpu/gpu_device.cc:2251] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.\n",
+ "Skipping registering GPU devices...\n"
+ ]
+ }
+ ],
"source": [
"arrText = np.array(['test', 'why', 'would', 'this', 'work', 'weird', 'array', 'method', 'returns', 'math'])\n",
"arrNums = np.array([])\n",
@@ -45,26 +67,26 @@
},
{
"cell_type": "code",
- "execution_count": 126,
+ "execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<tf.Tensor: shape=(10, 2), dtype=float32, numpy=\n",
- "array([[ 0.03479927, 0.0350842 ],\n",
- " [-0.01141354, 0.02443799],\n",
- " [ 0.04973641, 0.01413956],\n",
- " [-0.03284754, -0.04128627],\n",
- " [-0.04843548, 0.03706617],\n",
- " [-0.02948942, 0.04148373],\n",
- " [-0.04496865, -0.04993447],\n",
- " [ 0.01115872, -0.04161409],\n",
- " [ 0.01248763, 0.01584405],\n",
- " [ 0.02125626, -0.00353973]], dtype=float32)>"
+ "array([[ 0.03480979, 0.0453563 ],\n",
+ " [ 0.01358359, -0.00183941],\n",
+ " [-0.01757333, -0.04817909],\n",
+ " [-0.0360611 , 0.04445745],\n",
+ " [-0.00211517, -0.04308406],\n",
+ " [ 0.01702977, 0.01570695],\n",
+ " [ 0.04625987, 0.00359092],\n",
+ " [-0.0155 , 0.02139652],\n",
+ " [ 0.04769083, 0.00969797],\n",
+ " [ 0.01138154, -0.04589012]], dtype=float32)>"
]
},
- "execution_count": 126,
+ "execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
@@ -75,22 +97,22 @@
},
{
"cell_type": "code",
- "execution_count": 127,
+ "execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "<matplotlib.collections.PathCollection at 0x7f7e9d4def50>"
+ "<matplotlib.collections.PathCollection at 0x7fb3f02b8410>"
]
},
- "execution_count": 127,
+ "execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
- "image/png": "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",
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGdCAYAAADuR1K7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAmxUlEQVR4nO3df3TUVX7/8ddMQjKskknDj0yCiaC1CzEUCmxCPHuOrcRNdi1KF49sDohSjlQW0C6UAsqSZtse6rpWcFU4u6ceapGVYrfuhtLsocHuustIIFGXEMKxHhYQMomQzQTR/DBzv3/wzeiYSQhhJpm583yc8zmcufP+zNybT+K8/NzP547DGGMEAABgCedIdwAAACCSCDcAAMAqhBsAAGAVwg0AALAK4QYAAFiFcAMAAKxCuAEAAFYh3AAAAKskj3QHRkIgEND58+c1ZswYORyOke4OAAAYBGOMLl26pOzsbDmd/Z+fSchwc/78eeXk5Ix0NwAAwBCcPXtWN910U7/PJ2S4GTNmjKQrP5y0tLQR7g0AABiM9vZ25eTkBD/H+5OQ4aZ3KiotLY1wAwBAnLnaJSVcUAwAAKxCuAEAAFYh3AAAAKsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWCUhF/EDAOB69QSMak61quVShyaMcalgcoaSnHxfYSwg3AAAcI2q6ptUUdmgJn9HsC3L7VL5vDyV5meNYM8gMS0FAMA1qapv0opddSHBRpJ8/g6t2FWnqvqmEeoZehFuAAAYpJ6AUUVlg0yY53rbKiob1BMIV4HhQriJoJ6Akff9i/rZO+fkff8iv9wAYJmaU619zth8npHU5O9QzanW4esU+uCamwhh/hUA7Ndyqf9gM5Q6RAdnbiKA+VcASAwTxrgiWofoINxcJ+ZfASBxFEzOUJbbpf5u+Hboyln7gskZw9ktfAHh5jox/woAiSPJ6VD5vDxJ6hNweh+Xz8tjvZsRRri5Tsy/AkBiKc3P0vbFM+Vxh049edwubV88k+ssYwAXFF8n5l8BIPGU5mfp7jwPKxTHKMLNdeqdf/X5O8Jed+PQlTTP/CsA2CXJ6VDRrWNHuhsIg2mp68T8KwAAsYVwEwHMvwIAEDuYlooQ5l8BAIgNhJsIYv4VAICRx7QUAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrDEu4eeGFFzRp0iS5XC4VFhaqpqZmwPq9e/dqypQpcrlcmjZtmvbv399v7aOPPiqHw6GtW7dGuNcAACAeRT3c7NmzR2vWrFF5ebnq6uo0ffp0lZSUqKWlJWz9oUOHVFZWpmXLluntt9/W/PnzNX/+fNXX1/ep/c///E+99dZbys7OjvYwAABAnIh6uPnnf/5nPfLII1q6dKny8vK0Y8cOfelLX9JLL70Utn7btm0qLS3VunXrNHXqVP393/+9Zs6cqeeffz6k7ty5c1q9erVeeeUVjRo1KtrDAAAAcSKq4aarq0u1tbUqLi7+7A2dThUXF8vr9Ybdx+v1htRLUklJSUh9IBDQgw8+qHXr1un222+/aj86OzvV3t4esgEAADtFNdxcuHBBPT09yszMDGnPzMyUz+cLu4/P57tq/VNPPaXk5GQ99thjg+rHli1b5Ha7g1tOTs41jgQAAMSLuLtbqra2Vtu2bdPOnTvlcAzue5s2btwov98f3M6ePRvlXgIAgJES1XAzbtw4JSUlqbm5OaS9ublZHo8n7D4ej2fA+jfffFMtLS3Kzc1VcnKykpOTdfr0aa1du1aTJk0K+5qpqalKS0sL2QAAgJ2iGm5SUlI0a9YsVVdXB9sCgYCqq6tVVFQUdp+ioqKQekk6cOBAsP7BBx/Ub3/7W73zzjvBLTs7W+vWrdMvfvGL6A0GAADEhah/K/iaNWv00EMPafbs2SooKNDWrVt1+fJlLV26VJK0ZMkSTZw4UVu2bJEkPf7447rzzjv1zDPP6J577tGrr76qo0eP6kc/+pEkaezYsRo7NvSbt0eNGiWPx6Mvf/nL0R4OAACIcVEPNwsXLtSHH36ozZs3y+fzacaMGaqqqgpeNHzmzBk5nZ+dQLrjjju0e/dubdq0SU888YRuu+02vf7668rPz492VwEAgAUcxhgz0p0Ybu3t7XK73fL7/Vx/AwBAnBjs53fc3S0FAAAwEMINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFiFcAMAAKxCuAEAAFYh3AAAAKsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFiFcAMAAKxCuAEAAFYh3AAAAKsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVkke6A8BI6wkY1ZxqVculDk0Y41LB5AwlOR0j3S0AwBARbpDQquqbVFHZoCZ/R7Aty+1S+bw8leZnjWDPAABDxbQUElZVfZNW7KoLCTaS5PN3aMWuOlXVN41QzwAA14Nwg4TUEzCqqGyQCfNcb1tFZYN6AuEqAACxjHCDhFRzqrXPGZvPM5Ka/B2qOdU6fJ0CAETEsISbF154QZMmTZLL5VJhYaFqamoGrN+7d6+mTJkil8uladOmaf/+/cHnuru7tX79ek2bNk033HCDsrOztWTJEp0/fz7aw4BFWi71H2yGUgcAiB1RDzd79uzRmjVrVF5errq6Ok2fPl0lJSVqaWkJW3/o0CGVlZVp2bJlevvttzV//nzNnz9f9fX1kqSPP/5YdXV1+u53v6u6ujr99Kc/1cmTJ3XvvfdGeyiwyIQxrojWAQBih8MYE9WLCgoLC/WVr3xFzz//vCQpEAgoJydHq1ev1oYNG/rUL1y4UJcvX9a+ffuCbXPmzNGMGTO0Y8eOsO9x5MgRFRQU6PTp08rNzb1qn9rb2+V2u+X3+5WWljbEkSGe9QSMvvrUQfn8HWGvu3FI8rhd+vX6u7gtHABixGA/v6N65qarq0u1tbUqLi7+7A2dThUXF8vr9Ybdx+v1htRLUklJSb/1kuT3++VwOJSenh6RfsN+SU6HyuflSboSZD6v93H5vDyCDQDEoaiGmwsXLqinp0eZmZkh7ZmZmfL5fGH38fl811Tf0dGh9evXq6ysrN8U19nZqfb29pANKM3P0vbFM+Vxh049edwubV88k3VuACBOxfUift3d3XrggQdkjNH27dv7rduyZYsqKiqGsWeIF6X5Wbo7z8MKxQBgkaiGm3HjxikpKUnNzc0h7c3NzfJ4PGH38Xg8g6rvDTanT5/WwYMHB5x727hxo9asWRN83N7erpycnGsdDiyV5HSo6NaxI90NAECERHVaKiUlRbNmzVJ1dXWwLRAIqLq6WkVFRWH3KSoqCqmXpAMHDoTU9wab9957T//zP/+jsWMH/mBKTU1VWlpayAYAAOwU9WmpNWvW6KGHHtLs2bNVUFCgrVu36vLly1q6dKkkacmSJZo4caK2bNkiSXr88cd155136plnntE999yjV199VUePHtWPfvQjSVeCzf3336+6ujrt27dPPT09wetxMjIylJKSEu0hAQCAGBb1cLNw4UJ9+OGH2rx5s3w+n2bMmKGqqqrgRcNnzpyR0/nZCaQ77rhDu3fv1qZNm/TEE0/otttu0+uvv678/HxJ0rlz5/Tzn/9ckjRjxoyQ93rjjTf0p3/6p9EeEgAAiGFRX+cmFrHODQAA8Scm1rkBAAAYboQbAABgFcINAACwCuEGAABYJa5XKAaARNYTMKyuDYRBuAGAOFRV36SKygY1+TuCbVlul8rn5fG9aEh4TEsBQJypqm/Sil11IcFGknz+Dq3YVaeq+qYR6hkQGwg3ABBHegJGFZUNCrdAWW9bRWWDegIJt4QZEES4AYA4UnOqtc8Zm88zkpr8Hao51Tp8nQJiDOEGAOJIy6X+g81Q6gAbEW4AII5MGOOKaB1gI8INAMSRgskZynK71N8N3w5duWuqYHLGcHYLiCmEGwCII0lOh8rn5UlSn4DT+7h8Xh7r3SChEW4AIM6U5mdp++KZ8rhDp548bpe2L57JOjdIeCziBwBxqDQ/S3fneVihGAiDcAMAcSrJ6VDRrWNHuhtAzGFaCgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACswtcvAACAiOgJmJj4vjPCDQAAuG5V9U2qqGxQk78j2Jbldql8Xt6wf1M901IAAOC6VNU3acWuupBgI0k+f4dW7KpTVX3TsPaHcAMAAIasJ2BUUdkgE+a53raKygb1BMJVRAfhBgAADFnNqdY+Z2w+z0hq8neo5lTrsPWJcAMAAIas5VL/wWYodZFAuAEAAEM2YYwronWRQLgBAABDVjA5Q1lul/q74duhK3dNFUzOGLY+EW4AAMCQJTkdKp+XJ0l9Ak7v4/J5ecO63g3hBgAAXJfS/CxtXzxTHnfo1JPH7dL2xTOHfZ0bFvEDAADXrTQ/S3fneVihGAAA2CPJ6VDRrWNHuhtMSwEAALsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVfj6BQAAMGg9ARMT3x81EMINAAAYlKr6JlVUNqjJ3xFsy3K7VD4vb9i/+XsgTEsBAICrqqpv0opddSHBRpJ8/g6t2FWnqvqmEepZX4QbAAAwoJ6AUUVlg0yY53rbKiob1BMIVzH8CDcAAGBANada+5yx+TwjqcnfoZpTrcPXqQEQbgAAwIBaLvUfbIZSF22EGwAAMKAJY1wRrYs2wg0AABhQweQMZbld6u+Gb4eu3DVVMDljOLvVL8INAAAYUJLTofJ5eZLUJ+D0Pi6flxcz690QbgAAwFWV5mdp++KZ8rhDp548bpe2L54ZU+vcsIgfAAAYlNL8LN2d52GFYgAAYI8kp0NFt44d6W4MiGkpAABglWEJNy+88IImTZokl8ulwsJC1dTUDFi/d+9eTZkyRS6XS9OmTdP+/ftDnjfGaPPmzcrKytLo0aNVXFys9957L5pDAAAAcSLq4WbPnj1as2aNysvLVVdXp+nTp6ukpEQtLS1h6w8dOqSysjItW7ZMb7/9tubPn6/58+ervr4+WPP9739fzz33nHbs2KHDhw/rhhtuUElJiTo6YmPxIAAAMHIcxpiofhFEYWGhvvKVr+j555+XJAUCAeXk5Gj16tXasGFDn/qFCxfq8uXL2rdvX7Btzpw5mjFjhnbs2CFjjLKzs7V27Vr9zd/8jSTJ7/crMzNTO3fu1Le+9a2r9qm9vV1ut1t+v19paWkRGikAAIimwX5+R/XMTVdXl2pra1VcXPzZGzqdKi4ultfrDbuP1+sNqZekkpKSYP2pU6fk8/lCatxutwoLC/t9zc7OTrW3t4dsAADATlENNxcuXFBPT48yMzND2jMzM+Xz+cLu4/P5Bqzv/fdaXnPLli1yu93BLScnZ0jjAQAAsS8h7pbauHGj/H5/cDt79uxIdwkAAERJVNe5GTdunJKSktTc3BzS3tzcLI/HE3Yfj8czYH3vv83NzcrKygqpmTFjRtjXTE1NVWpq6lCHAQAR1RMwMb8IGhDPonrmJiUlRbNmzVJ1dXWwLRAIqLq6WkVFRWH3KSoqCqmXpAMHDgTrJ0+eLI/HE1LT3t6uw4cP9/uaABArquqb9NWnDqrsx2/p8VffUdmP39JXnzqoqvqmke4aYI2oT0utWbNGP/7xj/Wv//qvOnHihFasWKHLly9r6dKlkqQlS5Zo48aNwfrHH39cVVVVeuaZZ9TY2Ki/+7u/09GjR7Vq1SpJksPh0F//9V/rH/7hH/Tzn/9cx44d05IlS5Sdna358+dHezgAMGRV9U1asatOTf7QZSt8/g6t2FVHwAEiJOpfv7Bw4UJ9+OGH2rx5s3w+n2bMmKGqqqrgBcFnzpyR0/lZxrrjjju0e/dubdq0SU888YRuu+02vf7668rPzw/W/O3f/q0uX76s5cuXq62tTV/96ldVVVUll8vV5/0BIBb0BIwqKhsUbu0NoyvfrFxR2aC78zxMUQHXKerr3MQi1rkBMNy8719U2Y/fumrdTx6ZE/Pf2wOMlJhY5wYAcEXLpcGtoD7YOgD9I9wAwDCYMGZw0+aDrQPQP8INAAyDgskZynK71N/VNA5JWe4rt4UDuD6EGwAYBklOh8rn5UlSn4DT+7h8Xh4XEwMRQLgBgGFSmp+l7YtnyuMOnXryuF3avnimSvOz+tkTwLWI+q3gAIDPlOZn6e48DysUA1FEuAGAYZbkdHC7NxBFTEsBAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFiFcAMAAKxCuAEAAFYh3AAAAKsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFiFcAMAAKxCuAEAAFYh3AAAAKsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFglauGmtbVVixYtUlpamtLT07Vs2TJ99NFHA+7T0dGhlStXauzYsbrxxhu1YMECNTc3B59/9913VVZWppycHI0ePVpTp07Vtm3bojUEAAAQh6IWbhYtWqTjx4/rwIED2rdvn371q19p+fLlA+7zne98R5WVldq7d69++ctf6vz58/rmN78ZfL62tlYTJkzQrl27dPz4cT355JPauHGjnn/++WgNAwAAxBmHMcZE+kVPnDihvLw8HTlyRLNnz5YkVVVV6Rvf+IY++OADZWdn99nH7/dr/Pjx2r17t+6//35JUmNjo6ZOnSqv16s5c+aEfa+VK1fqxIkTOnjw4KD7197eLrfbLb/fr7S0tCGMEAAADLfBfn5H5cyN1+tVenp6MNhIUnFxsZxOpw4fPhx2n9raWnV3d6u4uDjYNmXKFOXm5srr9fb7Xn6/XxkZGQP2p7OzU+3t7SEbAACwU1TCjc/n04QJE0LakpOTlZGRIZ/P1+8+KSkpSk9PD2nPzMzsd59Dhw5pz549V53u2rJli9xud3DLyckZ/GAAAEBcuaZws2HDBjkcjgG3xsbGaPU1RH19ve677z6Vl5fra1/72oC1GzdulN/vD25nz54dlj4CAIDhl3wtxWvXrtXDDz88YM0tt9wij8ejlpaWkPZPP/1Ura2t8ng8YffzeDzq6upSW1tbyNmb5ubmPvs0NDRo7ty5Wr58uTZt2nTVfqempio1NfWqdQAAIP5dU7gZP368xo8ff9W6oqIitbW1qba2VrNmzZIkHTx4UIFAQIWFhWH3mTVrlkaNGqXq6motWLBAknTy5EmdOXNGRUVFwbrjx4/rrrvu0kMPPaR//Md/vJbuAwCABBCVu6Uk6etf/7qam5u1Y8cOdXd3a+nSpZo9e7Z2794tSTp37pzmzp2rl19+WQUFBZKkFStWaP/+/dq5c6fS0tK0evVqSVeurZGuTEXdddddKikp0dNPPx18r6SkpEGFrl7cLQUAQPwZ7Of3NZ25uRavvPKKVq1apblz58rpdGrBggV67rnngs93d3fr5MmT+vjjj4Ntzz77bLC2s7NTJSUlevHFF4PPv/baa/rwww+1a9cu7dq1K9h+880363e/+120hgIAAOJI1M7cxDLO3AAAEH9GdJ0bAACAkUK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFiFcAMAAKxCuAEAAFYh3AAAAKsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFiFcAMAAKxCuAEAAFYh3AAAAKsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqUQs3ra2tWrRokdLS0pSenq5ly5bpo48+GnCfjo4OrVy5UmPHjtWNN96oBQsWqLm5OWztxYsXddNNN8nhcKitrS0KIwAAAPEoauFm0aJFOn78uA4cOKB9+/bpV7/6lZYvXz7gPt/5zndUWVmpvXv36pe//KXOnz+vb37zm2Frly1bpj/+4z+ORtcBAEAccxhjTKRf9MSJE8rLy9ORI0c0e/ZsSVJVVZW+8Y1v6IMPPlB2dnafffx+v8aPH6/du3fr/vvvlyQ1NjZq6tSp8nq9mjNnTrB2+/bt2rNnjzZv3qy5c+fq97//vdLT0wfdv/b2drndbvn9fqWlpV3fYAEAwLAY7Od3VM7ceL1epaenB4ONJBUXF8vpdOrw4cNh96mtrVV3d7eKi4uDbVOmTFFubq68Xm+wraGhQd/73vf08ssvy+kcXPc7OzvV3t4esgEAADtFJdz4fD5NmDAhpC05OVkZGRny+Xz97pOSktLnDExmZmZwn87OTpWVlenpp59Wbm7uoPuzZcsWud3u4JaTk3NtAwIAAHHjmsLNhg0b5HA4BtwaGxuj1Vdt3LhRU6dO1eLFi695P7/fH9zOnj0bpR4CAICRlnwtxWvXrtXDDz88YM0tt9wij8ejlpaWkPZPP/1Ura2t8ng8YffzeDzq6upSW1tbyNmb5ubm4D4HDx7UsWPH9Nprr0mSei8XGjdunJ588klVVFSEfe3U1FSlpqYOZogAACDOXVO4GT9+vMaPH3/VuqKiIrW1tam2tlazZs2SdCWYBAIBFRYWht1n1qxZGjVqlKqrq7VgwQJJ0smTJ3XmzBkVFRVJkv7jP/5Dn3zySXCfI0eO6C//8i/15ptv6tZbb72WoQAAAEtdU7gZrKlTp6q0tFSPPPKIduzYoe7ubq1atUrf+ta3gndKnTt3TnPnztXLL7+sgoICud1uLVu2TGvWrFFGRobS0tK0evVqFRUVBe+U+mKAuXDhQvD9ruVuKQAAYK+ohBtJeuWVV7Rq1SrNnTtXTqdTCxYs0HPPPRd8vru7WydPntTHH38cbHv22WeDtZ2dnSopKdGLL74YrS4CAAALRWWdm1jHOjfA4PUEjGpOtarlUocmjHGpYHKGkpyOke4WgAQ02M/vqJ25ARD/quqbVFHZoCZ/R7Aty+1S+bw8leZnjWDPAKB/fHEmgLCq6pu0YlddSLCRJJ+/Qyt21amqvmmEegYAAyPcAOijJ2BUUdmgcHPWvW0VlQ3qCSTcrDaAOEC4AdBHzanWPmdsPs9IavJ3qOZU6/B1CgAGiXADoI+WS/0Hm6HUAcBwItwA6GPCGFdE6wBgOBFuAPRRMDlDWW6X+rvh26Erd00VTM4Yzm4BwKAQbgD0keR0qHxeniT1CTi9j8vn5bHeDYCYRLgBEFZpfpa2L54pjzt06snjdmn74pmscwMgZrGIH4B+leZn6e48DysUXwWrOAOxhXADYEBJToeKbh070t2IWaziDMQepqUAYIhYxRmITYQbABgCVnEGYhfhBgCGgFWcgdhFuAGAIWAVZyB2EW4AYAhYxRmIXYQbABgCVnEGYhfhBlbqCRh537+on71zTt73L3JRJyKOVZyB2MU6N7AO645guPSu4vzF3zcPv2/AiHIYYxLuf2nb29vldrvl9/uVlpY20t1BBPWuO/LFX+re/3fmawMQDaxQDAyPwX5+c+YG1rjauiMOXVl35O48Dx88iChWcQZiC9fcwBqsOwIAkAg3sAjrjgAAJMINLMK6IwAAiXADi7DuCABAItzAIqw7AgCQCDewTO+6Ix536NSTx+3iNnAASBDcCg7rlOZn6e48D+uOAECCItzASqw7AgCJi2kpAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGCVhFyh2BgjSWpvbx/hngAAgMHq/dzu/RzvT0KGm0uXLkmScnJyRrgnAADgWl26dElut7vf5x3mavHHQoFAQCdPnlReXp7Onj2rtLS0ke4SrqK9vV05OTkcrzjB8YofHKv4kujHyxijS5cuKTs7W05n/1fWJOSZG6fTqYkTJ0qS0tLSEvIXJF5xvOILxyt+cKziSyIfr4HO2PTigmIAAGAVwg0AALBKwoab1NRUlZeXKzU1daS7gkHgeMUXjlf84FjFF47X4CTkBcUAAMBeCXvmBgAA2IlwAwAArEK4AQAAViHcAAAAq1gdblpbW7Vo0SKlpaUpPT1dy5Yt00cffTTgPh0dHVq5cqXGjh2rG2+8UQsWLFBzc3PY2osXL+qmm26Sw+FQW1tbFEaQOKJxrN59912VlZUpJydHo0eP1tSpU7Vt27ZoD8VKL7zwgiZNmiSXy6XCwkLV1NQMWL93715NmTJFLpdL06ZN0/79+0OeN8Zo8+bNysrK0ujRo1VcXKz33nsvmkNIKJE8Xt3d3Vq/fr2mTZumG264QdnZ2VqyZInOnz8f7WEkjEj/fX3eo48+KofDoa1bt0a41zHOWKy0tNRMnz7dvPXWW+bNN980f/iHf2jKysoG3OfRRx81OTk5prq62hw9etTMmTPH3HHHHWFr77vvPvP1r3/dSDK///3vozCCxBGNY/Uv//Iv5rHHHjP/+7//a95//33zb//2b2b06NHmhz/8YbSHY5VXX33VpKSkmJdeeskcP37cPPLIIyY9Pd00NzeHrf/Nb35jkpKSzPe//33T0NBgNm3aZEaNGmWOHTsWrPmnf/on43a7zeuvv27effddc++995rJkyebTz75ZLiGZa1IH6+2tjZTXFxs9uzZYxobG43X6zUFBQVm1qxZwzksa0Xj76vXT3/6UzN9+nSTnZ1tnn322SiPJLZYG24aGhqMJHPkyJFg23//938bh8Nhzp07F3aftrY2M2rUKLN3795g24kTJ4wk4/V6Q2pffPFFc+edd5rq6mrCzXWK9rH6vG9/+9vmz/7szyLX+QRQUFBgVq5cGXzc09NjsrOzzZYtW8LWP/DAA+aee+4JaSssLDR/9Vd/ZYwxJhAIGI/HY55++ung821tbSY1NdX85Cc/icIIEkukj1c4NTU1RpI5ffp0ZDqdwKJ1vD744AMzceJEU19fb26++eaECzfWTkt5vV6lp6dr9uzZwbbi4mI5nU4dPnw47D61tbXq7u5WcXFxsG3KlCnKzc2V1+sNtjU0NOh73/ueXn755QG/uAuDE81j9UV+v18ZGRmR67zlurq6VFtbG/JzdjqdKi4u7vfn7PV6Q+olqaSkJFh/6tQp+Xy+kBq3263CwsIBjx2uLhrHKxy/3y+Hw6H09PSI9DtRRet4BQIBPfjgg1q3bp1uv/326HQ+xln7yezz+TRhwoSQtuTkZGVkZMjn8/W7T0pKSp8/2MzMzOA+nZ2dKisr09NPP63c3Nyo9D3RROtYfdGhQ4e0Z88eLV++PCL9TgQXLlxQT0+PMjMzQ9oH+jn7fL4B63v/vZbXxOBE43h9UUdHh9avX6+ysrKE/eLGSInW8XrqqaeUnJysxx57LPKdjhNxF242bNggh8Mx4NbY2Bi199+4caOmTp2qxYsXR+09bDHSx+rz6uvrdd9996m8vFxf+9rXhuU9Adt0d3frgQcekDFG27dvH+nuIIza2lpt27ZNO3fulMPhGOnujJjkke7AtVq7dq0efvjhAWtuueUWeTwetbS0hLR/+umnam1tlcfjCbufx+NRV1eX2traQs4INDc3B/c5ePCgjh07ptdee03Slbs+JGncuHF68sknVVFRMcSR2Wekj1WvhoYGzZ07V8uXL9emTZuGNJZENW7cOCUlJfW5YzDcz7mXx+MZsL733+bmZmVlZYXUzJgxI4K9TzzROF69eoPN6dOndfDgQc7aREA0jtebb76plpaWkJmFnp4erV27Vlu3btXvfve7yA4iVo30RT/R0nuR6tGjR4Ntv/jFLwZ1keprr70WbGtsbAy5SPX//u//zLFjx4LbSy+9ZCSZQ4cO9Xt1OwYWrWNljDH19fVmwoQJZt26ddEbgOUKCgrMqlWrgo97enrMxIkTB7zg8c///M9D2oqKivpcUPyDH/wg+Lzf7+eC4giJ9PEyxpiuri4zf/58c/vtt5uWlpbodDxBRfp4XbhwIeQz6tixYyY7O9usX7/eNDY2Rm8gMcbacGPMlduL/+RP/sQcPnzY/PrXvza33XZbyO3FH3zwgfnyl79sDh8+HGx79NFHTW5urjl48KA5evSoKSoqMkVFRf2+xxtvvMHdUhEQjWN17NgxM378eLN48WLT1NQU3PiP87V59dVXTWpqqtm5c6dpaGgwy5cvN+np6cbn8xljjHnwwQfNhg0bgvW/+c1vTHJysvnBD35gTpw4YcrLy8PeCp6enm5+9rOfmd/+9rfmvvvu41bwCIn08erq6jL33nuvuemmm8w777wT8rfU2dk5ImO0STT+vr4oEe+WsjrcXLx40ZSVlZkbb7zRpKWlmaVLl5pLly4Fnz916pSRZN54441g2yeffGK+/e1vmz/4gz8wX/rSl8xf/MVfmKampn7fg3ATGdE4VuXl5UZSn+3mm28expHZ4Yc//KHJzc01KSkppqCgwLz11lvB5+68807z0EMPhdT/+7//u/mjP/ojk5KSYm6//XbzX//1XyHPBwIB893vftdkZmaa1NRUM3fuXHPy5MnhGEpCiOTx6v3bC7d9/u8RQxfpv68vSsRw4zDm/180AgAAYIG4u1sKAABgIIQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFjl/wFvqYjCOnCfGwAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
@@ -116,7 +138,7 @@
},
{
"cell_type": "code",
- "execution_count": 130,
+ "execution_count": 6,
"metadata": {},
"outputs": [
{
@@ -125,7 +147,7 @@
"<tf.Tensor: shape=(2,), dtype=int64, numpy=array([0, 4])>"
]
},
- "execution_count": 130,
+ "execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
@@ -150,7 +172,7 @@
},
{
"cell_type": "code",
- "execution_count": 161,
+ "execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
@@ -162,7 +184,7 @@
},
{
"cell_type": "code",
- "execution_count": 177,
+ "execution_count": 8,
"metadata": {},
"outputs": [
{
@@ -171,7 +193,7 @@
"<tf.Tensor: shape=(1, 6), dtype=int64, numpy=array([[29, 17, 4, 21, 8, 2]])>"
]
},
- "execution_count": 177,
+ "execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
@@ -183,7 +205,7 @@
},
{
"cell_type": "code",
- "execution_count": 178,
+ "execution_count": 9,
"metadata": {},
"outputs": [
{
@@ -196,7 +218,7 @@
" 'elaria', 'distant', 'began', 'and', 'ancient', 'an'], dtype='<U9')"
]
},
- "execution_count": 178,
+ "execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
@@ -208,7 +230,7 @@
},
{
"cell_type": "code",
- "execution_count": 186,
+ "execution_count": 10,
"metadata": {},
"outputs": [
{
@@ -217,7 +239,7 @@
"'distant realm of lumina where the'"
]
},
- "execution_count": 186,
+ "execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
@@ -228,6 +250,34 @@
" decoded_texts.append([vocab[i] for i in sequence if i != 0])\n",
"' '.join(decoded_texts[0])"
]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "<tf.Tensor: shape=(1, 17), dtype=int64, numpy=array([[0, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])>"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Default this outputs the embeddings but with count you get the count (one hot style) of the words.\n",
+ "# You can also use 'multi_hot' to get binary (has/does not have). Also, you can use tf_idf to downweight\n",
+ "# common words and upweight less common ones (still onehot esque).\n",
+ "\n",
+ "vect = keras.layers.TextVectorization(output_mode='count')\n",
+ "st = 'what would that seem to be what would why where when how they are not there when you try that would'\n",
+ "vect.adapt(st)\n",
+ "\n",
+ "vect([st])"
+ ]
}
],
"metadata": {
diff --git a/imageManipulation/ImageManipulationKeras.ipynb b/imageManipulation/ImageManipulationKeras.ipynb
@@ -0,0 +1,40 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.datasets import load_sample_images\n",
+ "import keras\n",
+ "import tensorflow as tf \n",
+ "\n",
+ "images = load_sample_images()['images']\n",
+ "crop_layer = keras.layers.CenterCrop(height=100, width=100)\n",
+ "cropped_images = crop_layer(images)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": ".venv",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.2"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}