Table of Contents
Install tensorflow on MacBook Pro M1 and kerns for R
I have a 2021 MacBook Pro with Apple M1 Pro chip. I tried to install tensor flow on it following the instruction of Apple here https://developer.apple.com/metal/tensorflow-plugin/ as well as many other instructions online but failed to make it work.
Install tensorflow
After trial and error, this is what worked for me.
- Follow the instruction here https://developer.apple.com/metal/tensorflow-plugin/ to install miniconda.
- Install tensorflow using
python -m pip install tensorflow-macos==2.9
- Install tensorflow-metal
using python -m pip install tensorflow-metal==0.5.0
After this, you can test the installation using the example below. First, save the following code to a file such as test.py.
import tensorflow as tf import ssl ssl._create_default_https_context = ssl._create_unverified_context cifar = tf.keras.datasets.cifar100 (x_train, y_train), (x_test, y_test) = cifar.load_data() model = tf.keras.applications.ResNet50( include_top=True, weights=None, input_shape=(32, 32, 3), classes=100,) loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True) model.compile(optimizer="adam", loss=loss_fn, metrics=["accuracy"]) model.fit(x_train, y_train, epochs=5, batch_size=64)
Then, test it using python test.py
.
Install keras for R
To use tensorflow in R, first install the packages tensorflow and keras within R using
install.packages('tensorflow') install.packages('keras')
Then, create or open the .Renviron
file within your user directory, e.g., using nano ~/.Renviron
. Add the following in the file (this will allow R to find your python and tensorflow installation.
RETICULATE_PYTHON = "~/miniconda/bin/python"
Now, you can test whether it works or not within R using the example below (from the book Introduction to Machine Learning).
## Data library(ISLR2) ## install the package if not yet Gitters <- na.omit(Hitters) n <- nrow(Gitters) set.seed(13) ntest <- trunc(n / 3) testid <- sample(1:n, ntest) x <- scale(model.matrix(Salary ~ . - 1, data = Gitters)) y <- Gitters$Salary ## Now run a simple example library(keras) ## this is used to build the model ## first layer is the hidden layer with 50 nodes ## output one layer with one node active the linear activiation function modnn <- keras_model_sequential() %>% layer_dense(units = 50, activation = "relu", input_shape = ncol(x)) %>% layer_dropout(rate = 0.4) %>% layer_dense(units = 1, activation = "linear") summary(modnn) ## communicate with python modnn %>% compile(loss = "mse", optimizer = optimizer_rmsprop(), metrics = list("mean_absolute_error") ) ## conduct the analysis nn.fit.1layer <- modnn %>% fit( x[-testid, ], y[-testid], epochs = 1000, batch_size = 32, validation_data = list(x[testid, ], y[testid]) )